NuGetパッケージをインストールするときに、これらの.dllの追加を回避できますか?


10

私は私のものと同様にこの提案された質問を読むことから始めましたが、解決策はありませんでした: MSTest.TestAdapterがなぜそのDLLをNuGetパッケージに追加するのですか?

問題の簡単な説明

NuGetパッケージを作成し、インストールするたびにNUnitNUnit3TestAdapter .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パッケージを復元して、次のように問題を再現できます。

  1. client-library-repro-nuget-issue / ClientLibrary /でClientLibrary.1.0.0.nupkgを見つけます

  2. target-project-repro-nuget-issueのパッケージマネージャーコンソールを開いて実行する

Install-Package C:\Path\To\client-library-repro-nuget-issue\ClientLibrary\ClientLibrary.1.0.0.nupkg
  1. 注意NUnitNUnit3TestAdapter .dllに追加されているのTargetProjectにもかかわらず- TargetProjectすでに持っているNUnitNUnit3TestAdapterインストールされています。

より長い概要

と呼ばれる内部使用のために独自のNuGetパッケージを作成しました。ClientLibraryそれをと呼ばれる別のプロジェクトにインストールしようとしていTargetProjectます。これは構造の簡単な内訳です​​:

  • FullSolution.sln
    • MainFramework.csproj
    • ClientLibrary.csproj-> .nupkgこれから生成

別のプロジェクト:

  • TargetProject.sln
    • TargetProject.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

  1. ビルドClientLibraryしてMainFrameworkプロジェクトを作成して.dllを生成する
  2. ディレクトリを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>
  1. 実行nuget pack -IncludeReferencedProjects- (およびによって使用される他のいくつかのパッケージ)にClientLibrary依存しているためMainFrameworkMainFramework

  2. に移動しTargetProject、パッケージマネージャーコンソールを開きます。

  3. 走る Install-Package C:\Path\To\ClientLibrary.1.0.0.nupkg

インストールは正常に実行され、次にそれらは .dll私は不満を言っているものを追加します。

問題:

MainFramework持っているNUnitNUnit3TestAdapterNuGetパッケージがインストールされています。ClientLibrary ではない。したがって、はにインストール.dllされているため追加されたようですが、にはインストールされてMainFrameworkいませんClientLibrary。(ClientLibrary参照、覚えておいてくださいMainFramework.dll

との両方にインストールされている他のパッケージがあり、これらはインストール時に追加されるのパッケージがないため、問題はパッケージが存在することによって引き起こされているのではなく、MainFrameworkClientLibrary.dllTargetProjectMainFrameworkClientLibrary

私はこの問題をインストールNUnitしてNUnit3TestAdapter上に「修正」できると信じていますClientLibrary、しかしClientLibrary、それは不必要と思われるので、実際には、すべてのこれらのパッケージを使用していません。

どのようにしてインストールすることができますClientLibraryTargetProject含まないNUnitNUnit3TestAdapter .dllの、およびインストールすることなく、NUnitかつNUnit3TestAdapter上にClientLibrary?可能であれば、すでにインストールされているおよびパッケージClientLibrary.1.0.0.nupkgを使用するように伝えたいNUnitNUnit3TestAdapterTargetProject

答えが「不可能」である場合は問題ありませんが、説明をお願いします。この質問の全体的な目標は、NuGetと依存関係がどのように機能するかをよりよく理解し、これが問題である理由を理解することです最初の場所。読んでくれてありがとう。


1
動作を説明するサンプルプロジェクトを提供する必要があります。
Lex Li

@LexLi動作を説明する2つのサンプルリポジトリと再現手順を使用して、プロジェクトの説明を更新しました。
クリスティーン

3
このコードは、MainFramework.csprojにNUnitの依存関係があることを示す不適切なアプローチを示しています。それらをMainFramework.UnitTest.csprojなどの個別の単体テストプロジェクトに移動できますか?
Lex Li

理にかなっている- ClientLibraryだけのいくつかの部分を使用していますMainFrameworkので、MainFramework確かに分割することができますMainFramework.FrameworkMainFramework.TestNUnit依存関係のみに存在するMainFramework.Test、とClientLibraryだけ利用MainFramework.Framework。分析ありがとうございます。
クリスティーン

回答:


7

一般に、すべてのテストと対応するNuGetパッケージを独自のプロジェクトに保持することをお勧めします。次に、どのプロジェクトもテストプロジェクトを参照していないことを確認します。

ここに画像の説明を入力してください

しないでくださいクライアントライブラリを参照することを彼らがプロジェクトに追加されたので、サイド、クライアントライブラリは、NUnitのDLLが含まれます。

上のに対し行う側、クライアントライブラリは、どちらも参照テストプロジェクトので、NUnitのDLLが含まれていません。


2
内訳と説明をありがとう-私はあなたと他のユーザーが提案したように私のプロジェクトを分割することによってこのプラクティスを実装しました。これは、私が以前行っていたものよりもはるかに優れた練習のように感じられ、私の問題も解決されました。
クリスティーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.