私は私のものと同様にこの提案された質問を読むことから始めましたが、解決策はありませんでした: MSTest.TestAdapterがなぜそのDLLをNuGetパッケージに追加するのですか?
問題の簡単な説明
NuGetパッケージを作成し、インストールするたびにNUnit、NUnit3TestAdapter .dllさんは、私がインストールプロジェクトに追加されます。この問題を解決する解決策を見つけたいです。
再現手順
私が説明している問題を再現する2つのgitリポジトリをプッシュしました。
ClientLibrary/ MainFramework(NuGetパッケージを生成したプロジェクト)-https ://github.com/harbourc/client-library-repro-nuget-issue
TargetProject(パッケージがインストールされるプロジェクト)-https://github.com/harbourc/target-project-repro-nuget-issue
両方のリポジトリのクローンを作成し、NuGetパッケージを復元して、次のように問題を再現できます。
client-library-repro-nuget-issue / ClientLibrary /でClientLibrary.1.0.0.nupkgを見つけます
target-project-repro-nuget-issueのパッケージマネージャーコンソールを開いて実行する
Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
- 注意
NUnitとNUnit3TestAdapter.dllに追加されているのTargetProjectにもかかわらず-TargetProjectすでに持っているNUnitとNUnit3TestAdapterインストールされています。
より長い概要
と呼ばれる内部使用のために独自のNuGetパッケージを作成しました。ClientLibraryそれをと呼ばれる別のプロジェクトにインストールしようとしていTargetProjectます。これは構造の簡単な内訳です:
FullSolution.slnMainFramework.csprojClientLibrary.csproj->.nupkgこれから生成
別のプロジェクト:
TargetProject.slnTargetProject.csproj->.nupkgこれにインストール
ClientLibraryへの参照がありMainFramework、からの多くのメソッドを使用しMainFrameworkます。
にインストールClientLibrary.1.0.0.nupkgするTargetProjectと、次.dllのものがに追加されTargetProjectます。
nunit.engine.api.dll
nunit.engine.dll
NUnit3.TestAdapter.dll
NUnit3.TestAdapter.pdb
これらを削除すると.dll、すべてが正常に機能します。TargetProjectすでにこれらのパッケージがインストールされているます。それらは必要ではなく、インストール時にそれらを削除しなければならないのは面倒です。
ここに私がClientLibraryNuGetパッケージを追加する方法がありますTargetProject:
- ビルド
ClientLibraryしてMainFrameworkプロジェクトを作成して.dllを生成する - ディレクトリを
ClientLibraryフォルダーに変更して実行しますnuget spec
.nuspec ファイルが生成されます:
<?xml version="1.0"?>
<package >
<metadata>
<id>ClientLibrary</id>
<version>1.0</version>
<title>Client Library</title>
<authors>Myself</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Client library for interacting with my application.</description>
<dependencies>
<group targetFramework=".NETFramework4.7.2" />
</dependencies>
</metadata>
</package>
実行
nuget pack -IncludeReferencedProjects- (およびによって使用される他のいくつかのパッケージ)にClientLibrary依存しているためMainFrameworkMainFrameworkに移動し
TargetProject、パッケージマネージャーコンソールを開きます。- 走る
Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg
インストールは正常に実行され、次にそれらは .dll私は不満を言っているものを追加します。
問題:
MainFramework持っているNUnitとNUnit3TestAdapterNuGetパッケージがインストールされています。ClientLibrary ではない。したがって、はにインストール.dllされているため追加されたようですが、にはインストールされてMainFrameworkいませんClientLibrary。(ClientLibrary参照、覚えておいてくださいMainFramework.dll)
との両方にインストールされている他のパッケージがあり、これらはインストール時に追加されるのパッケージがないため、問題はパッケージが存在することによって引き起こされているのではなく、MainFrameworkClientLibrary.dllTargetProjectMainFrameworkClientLibrary。
私はこの問題をインストールNUnitしてNUnit3TestAdapter上に「修正」できると信じていますClientLibrary、しかしClientLibrary、それは不必要と思われるので、実際には、すべてのこれらのパッケージを使用していません。
どのようにしてインストールすることができますClientLibraryにTargetProject含まないNUnitとNUnit3TestAdapter .dllの、およびインストールすることなく、NUnitかつNUnit3TestAdapter上にClientLibrary?可能であれば、すでにインストールされているおよびパッケージClientLibrary.1.0.0.nupkgを使用するように伝えたいNUnitNUnit3TestAdapterTargetProject。
答えが「不可能」である場合は問題ありませんが、説明をお願いします。この質問の全体的な目標は、NuGetと依存関係がどのように機能するかをよりよく理解し、これが問題である理由を理解することです最初の場所。読んでくれてありがとう。
ClientLibraryだけのいくつかの部分を使用していますMainFrameworkので、MainFramework確かに分割することができますMainFramework.FrameworkとMainFramework.Test、NUnit依存関係のみに存在するMainFramework.Test、とClientLibraryだけ利用MainFramework.Framework。分析ありがとうございます。
