2016-11-15 29 views
0

私は別のパッケージYに依存してパッケージXを持っています。デフォルトでは(Visual Studio 2015 Upd3 + Nuget 3.5)、パッケージXを参照するプロジェクトはパッケージYを参照して更新されます。問題は、パッケージYのAPIが顧客に公開されていないため、Xの顧客はYを全く参照する必要がないということです。非推移的なパッケージ依存関係ですか?

したがって、パッケージXへの参照を追加した後、パッケージYの内容をビルド時の出力フォルダにコピーする必要がありますが、パッケージYをプロジェクト参照に追加しないでください。

どうすればよいですか?

理論的には、プロジェクトXにインフラストラクチャパッケージYのソースを含めることができます(両方のプロジェクトはMITライセンスでopensourceです)が、私は多かれ少なかれ標準的な方法を使用することを好むでしょう。我々はそれを必要とする理由例

例:

  • 我々は今調査している場合:テストヘルパーとnugetパッケージPDBファイルは、ソース(参照Microsoft.DiaSymReaderパッケージ)に一致していることを保証します。すべてのテストプロジェクトでMicrosoft.DiaSymReaderアセンブリを参照する必要はありません。

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

後者の場合は、我々は明らかに、私たちのプロジェクトにロザリンソースをマージすることはできませんし、あまりにも、私たちのパッケージの一部としてRoslynのバイナリを配布することができないとしてはるかに悪いです。

ご提案は大歓迎です!

答えて

0

あなたはパッケージXの作成者ですので、あなたのファイルはnupkgに含まれています。また、第三者のDLLも含めることができます。

技術的に可能ですが、そうすることはお勧めしません。ある日パッケージYを使用することに決めたパッケージXの消費者を考えてください。突然、XはYの別のバージョンを期待しているため、ランタイムエラーが発生します。

+0

はい、このオプションも検討していますが、解決できない依存関係の競合が発生する可能性があります。例:YDK v1.0をパッケージXの一部として提供し、サードパーティのプロジェクトはパッケージXを参照し、パッケージY v2.0への明示的な参照を追加します。 Roslynのような大規模なインフラストラクチャーの依存関係がないことは間違いありません。ですから、私たちは通常のナゲットの依存関係を保つことを望んでいますが、顧客のプロジェクト参照にそれらを含めることはしません。 – Sinix

0

パッケージYのdllをパッケージXをインストールしたプロジェクトにY DLLを追加しないパッケージX。

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

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

  • パッケージXとしてパックプロジェクトXあなたがNuGet Package ExplorerとパッケージX.nupkgファイルを開いたときに今、あなたはコンテンツフォルダに保存されているY DLLを検索します。パッケージXを他のプロジェクトにインストールすると、Y DLLがプロジェクトにコンテンツファイルとして追加されます。プロジェクトをビルドした後、Y dllは出力ディレクトリにコピーされます。

  • +0

    これは、@ botond.botosの提案と同じことです。お客様がYパッケージに直接参照を追加すると、バージョン管理に問題が発生します。 – Sinix

    +0

    あなたの顧客が、あなたのXパッケージと異なるバージョンを持つY dllに直接参照を追加すると、アプリケーションの設定ファイルのアセンブリバージョンをリダイレクトできます:https://msdn.microsoft.com/en-us/library/7wd6ex19(v= vs.110).aspx#Anchor_2 –

    +0

    しかし、このような競合の場合、Nuget統合機能は機能しません。手動で解決する必要がありました。パッケージYが大きければオプションではなく、例としてroslyn。 – Sinix

    関連する問題