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