我有一個包X,取決於另一個包Y.默認情況下(Visual Studio 2015 Upd3 + nuget 3.5)引用到包X的任何項目都將參考包Y更新。問題是,X的客戶根本不需要參考Y,因爲Y包的API不是也不應該暴露給客戶。非傳遞包依賴關係?
因此,預期的行爲是繼:後加入參考打包X,包的Y內容應該複製到輸出文件夾中生成,但包ÿ不應該被添加到項目引用。
有沒有什麼辦法呢?
理論上我們可以包括基礎架構包的Y來源爲我們的項目X(這兩個項目都在MIT許可開源的),但我寧願使用或多或少的標準方法。
爲什麼我們需要它的情況的例子:
我們現在正在對此案進行調查:即確保PDB文件相匹配的來源(參考
Microsoft.DiaSymReader
包)NuGet包與測試幫手。我們不希望我們所有的測試項目都參考Microsoft.DiaSymReader
程序集。或多或少是理論上的問題(現在不是問題,但如果項目將投入生產將會成爲問題):使用Roslyn編譯和運行腳本的自定義腳本引擎。我們不希望在所有將使用腳本引擎的項目中引用Roslyn程序集。
後一種情況更糟糕,因爲我們不能合併羅斯林源到我們的項目中,很明顯,和我們的包的一部分,不能分發羅斯林二進制文件了。
歡迎任何建議!
是的,我們也在考慮這個選項,但它可能導致無法解決的依賴衝突。例如:我們提供Y.dll v1.0作爲我們軟件包X的一部分,第三方項目引用我們的軟件包X,然後添加對Y v2.0包的明確引用。對於像Roslyn這樣的大型基礎設施依賴項來說,這絕對不行。所以我們寧願留在正常的nuget依賴關係中,但不要將它們包含到客戶的項目引用中 – Sinix