Nuget 的中央軟體套件管理 (CPM) 使用

在 Nuget 的相依協助下,已經某種程度上可以是協助擺脫 dll hell 的一大工程(功臣?)

但是如果在一個解決方案當中有多個專案要引用相同的 Nuget 套件時,可能會發生各個不同的專案有各自使用不同 Nuget 套件的版本(套件相同版本不同)。

而每次要更新某個 Nuget 套件時就會要針對不同專案要處理更新,就會顯得相當繁瑣。

在 .NET 6.0 的設計中,開始可以使用中央的套件管理 Central Package Management (CPM) 的處理方式來處理這個問題。

 


很多時候如果一個解決方案裡有多個專案共存,如果要更新 Nuget 套件的,可以透過 Visual Studio 當中的 "管理方案的 Nuget 套件":

 

然後透過勾選來處理:

並沒有什麼太大的問題。

 

但後來發現,如果解決方案內含的專案量達到一定個數且又有內含資料夾來管理同質性專案時,透過 CPM 的方式來管理就會顯得更加簡便些。

 

如果要在方案當中使用 CPM 其實不難,可以在該方案當中自行建立 "Directory.Packages.props" 檔案,再額外編輯該檔案的內文含有下列 XML 標記:

<Project>
  <PropertyGroup>
    <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
  </PropertyGroup>
  <ItemGroup>
    <!-- Add Your PackageVersion-->
  </ItemGroup>
</Project>

或是在該方案底下使用 dotnet 指令:

dotnet new packagesprops

 

在 Visual Studio 中可以這樣操作:

 

再輸入上述指令 "dotnet new packagesprops":

 

再透過 "ls" 或 "dir" 查詢,或是透過方案總管的 "資料夾檢視" 觀看是否有該 "Directory.Packages.props" 檔案出現:

 

開啟該 "Directory.Packages.props" 檔案觀看:

 

接著在 <ItemGroup></ItemGroup> 之中加入會使用到的 PackageVersion 的標記:

 

再針對這個方案中的各個專案檔編輯其 PackageReference 的 Version:

 

把 Version 與指定的版本號移除:

編輯完畢後就完成了。

 

所以當 "Directory.Packages.props" 所指定的 Version 改變時,方案的 Nuget 套件管理員就會發現版本改變了 (這裡以降版為例):

當然,不會因為改成使用 CPM 就會影響到 Nuget 套件管理對方案的控管。

 

如果想要了解更多詳細的 CPM 控制方式,請參考微軟 learn 官方文件:

中央軟體套件管理 (CPM):
https://learn.microsoft.com/zh-tw/nuget/consume-packages/central-package-management


 


I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
 

MVP_Logo



I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.

If you want to know more about them, welcome to my website:
https://jamestsai.tw 


本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。