簡體   English   中英

非傳遞性包依賴關系?

[英]Non-transitive package dependencies?

我有一個依賴於另一個程序包Y的程序包X。默認情況下(Visual Studio 2015 Upd3 + nuget 3.5),任何引用程序包X的項目也將同時引用程序包Y。 問題是,X的客戶根本不需要引用Y,因為封裝Y的API既不也不應該向客戶公開。

因此,預期的行為如下:在添加對程序包X的引用之后,應將程序包Y的內容復制到內部版本的輸出文件夾中,但不應將程序包Y添加到項目引用中。

有什么辦法嗎?

從理論上講,我們可以將基礎結構軟件包Y的源包含到我們的項目X中(兩個項目都是MIT許可下的開源項目),但是我寧願使用或多或少的標准方法。

我們為什么需要它的情況示例:

  • 我們現在正在研究的情況:帶有測試幫助程序的nuget包,可確保PDB文件與源匹配(引用Microsoft.DiaSymReader包)。 我們不希望我們所有的測試項目都引用Microsoft.DiaSymReader程序集。

  • 或多或少是理論上的一個(目前尚不成問題,但如果將項目推向生產階段將是一個問題):使用Roslyn編譯和運行腳本的自定義腳本引擎。 我們不希望在所有使用腳本引擎的項目中都引用Roslyn程序集。

后者的情況要糟得多,因為顯然我們無法將roslyn源合並到我們的項目中,也無法將roslyn二進制文件作為軟件包的一部分分發。

歡迎任何建議!

您可以將Package Y的dll添加為Package X中的內容文件,而不會將Y dll添加到安裝Package X的項目中。

以下步驟顯示了如何使用Y dll作為內容文件創建PackageX。

  1. 通過添加->現有項將Y dll添加到Package X項目中。
  2. 選擇所有Y dll,然后單擊鼠標右鍵以打開“屬性”窗口,將“復制到輸出目錄”設置為“始終復制”。
  3. 使用nuget.exe將Project X打包為Package X

現在,當您使用NuGet包資源管理器打開Package X.nupkg文件時,您會發現存儲在內容文件夾中的Y dll。 並且當您在其他項目上安裝Package X時,Y dll將作為內容文件添加到項目中。 生成項目后,將Y dll復制到輸出目錄。

由於您是軟件包X的作者,因此由您決定nupkg文件中包含的內容。 您還可以包括第三方dll。

盡管從技術上講是可行的,但我不建議您這樣做。 想想您的軟件包X的使用者,有一天他們可能決定使用軟件包Y。由於X期望使用不同版本的Y,因此突然他們將獲得運行時錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM