簡體   English   中英

PackageReference或ProjectReference到同一解決方案中的組件?

[英]PackageReference or ProjectReference to a component inside the same solution?

讓我們考慮一個場景,在該場景中,我們有兩個.NET Standard項目要公開並為以下項目創建NuGet包:

圖書館解決方案

ClassLibrary1(CL1)

∟ClassLibrary2(CL2)

重要的是要提到CL1與CL2具有ProjectReference。

NuGet的文檔指出,理想情況下,我們應該使用一個程序集生成一個包,因此我們為每個包創建一個NuGet包。

當我們需要在LibrarySolution的范圍內確定CL1中需要哪個版本的CL2時,就會出現問題,因為我們有直接的項目參考。

我想到以下兩種方法:

  1. 在解決方案中維護項目引用,這意味着我們需要將程序包版本存儲在csproj文件中,提交版本更改等,以便版本約束和依賴性要求正確(我們目前在CI管道和當前版本中處理版本控制)版本存儲在此處,而不是代碼中)。

  2. 將對CL2的依賴關系轉換為PackageReference。 這樣,CL1將始終依賴於已發布的CL2版本。 但是,這樣做將意味着圍繞發布和更新NuGet軟件包(批准PR,合並,CI等)進行所有操作,這可能會非常耗時。

我認為選項1更好,但還是有點手動。 是否有解決此問題的最佳方法? 我寧願不要使用包來引用位於相同解決方案內部的項目,因為這會導致不必要的間接訪問。

根據我的經驗,使用PackageReference的方法最簡單,頭痛最少。 是的,還有更多的開銷,但這使所有事情都變得明確,這是官方支持的解決方案。

(如果您對這條路線感到猶豫,因為每次更改CL2時都需要更新CL1,也許您需要考慮組件化是否有意義。理想情況下,CL2應該定義相對穩定的接口,並且可以獨立於CL1進行更改。)

否則,有兩種您沒有提到的方法:

  1. 在單個NuGet程序包中包含兩個dll。 盡管現有工具尚未正式支持此功能,但此處介紹了幾種解決方法: https : //github.com/NuGet/Home/issues/3891

  2. 將這兩個項目合並到一個庫中,因為無論如何它們都像我上面提到的那樣緊密地結合在一起。

首先,您可以使用ProjectReference正確地執行操作。 同一解決方案中的兩個項目甚至沒有理由知道另一個軟件包的存在。 現在,由於您在同一解決方案中擁有CL1和CL2,我想CL1需要CL2的最新版本。

考慮到前一個因素,您只需添加<GeneratePackageOnBuild>true</GeneratePackageOnBuild>標記即可生成構建軟件包,MSBuild會將其更改為NuGet依賴項,使其與軟件包中的最新版本相關。

暫無
暫無

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

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