1

別のパッケージ Y に依存するパッケージ X があります。デフォルト (Visual Studio 2015 Upd3 + nuget 3.5) では、パッケージ X を参照するプロジェクトは、パッケージ Y も参照して更新されます。問題は、X の顧客が Y への参照をまったく必要としないことです。これは、パッケージ Y の API が顧客に公開されておらず、公開されるべきではないためです。

したがって、予想される動作は次のとおりです。パッケージ X への参照を追加した後、ビルド時にパッケージ Y のコンテンツを出力フォルダーにコピーする必要がありますが、パッケージ Y をプロジェクト参照に追加することはできません。

そうする方法はありますか?

理論的には、インフラストラクチャ パッケージ Y のソースをプロジェクト X に含めることができます (どちらのプロジェクトも MIT ライセンスの下でオープンソースです) が、多かれ少なかれ標準的なアプローチを使用したいと思います。

必要なケースの例:

  • Microsoft.DiaSymReader現在調査中のケース: PDB ファイルがソース (参照パッケージ)と一致することを確認するテスト ヘルパーを含む nuget パッケージ。Microsoft.DiaSymReaderすべてのテスト プロジェクトでアセンブリを参照する必要はありません。

  • 多かれ少なかれ理論的なもの (今のところ問題ではありませんが、プロジェクトが本番環境にプッシュされる場合は問題になるでしょう): Roslyn を使用してスクリプトをコンパイルおよび実行するカスタム スクリプト エンジン。スクリプト エンジンを使用するすべてのプロジェクトで、Roslyn アセンブリへの参照は必要ありません。

後者の場合は、明らかに roslyn ソースをプロジェクトにマージできず、パッケージの一部として roslyn バイナリを配布することもできないため、さらに悪化します。

どんな提案も大歓迎です!

4

2 に答える 2

1

パッケージ Y の dll をパッケージ X のコンテンツ ファイルとして追加できますが、これはパッケージ X をインストールしたプロジェクトに Y dll を追加しません。

次の手順は、コンテンツ ファイルとして Y dll を含むパッケージ X を作成する方法を示しています。

  1. [追加] -> [既存のアイテム] で Y dll をパッケージ X プロジェクトに追加します。
  2. すべての Y dll を選択し、右クリックして [プロパティ] ウィンドウを開き、[出力ディレクトリにコピー] を [常にコピー] に設定します。
  3. nuget.exe を使用してプロジェクト X をパッケージ X としてパックする

NuGet Package Explorerでパッケージ X.nupkg ファイルを開くと、コンテンツ フォルダーに Y dll が格納されていることがわかります。また、パッケージ X を他のプロジェクトにインストールすると、Y dll がコンテンツ ファイルとしてプロジェクトに追加されます。プロジェクトをビルドすると、Y dll が出力ディレクトリにコピーされます。

于 2016-11-16T07:13:19.820 に答える