
Quản lý Nuget Package Tập Trung (Central Package Management) trong .NET
March 1, 2025Trong quá trình phát triển ứng dụng, quản lý dependency là một nhiệm vụ quan trọng giúp đảm bảo tính ổn định và nhất quán của hệ thống. Trong .NET, Central Package Management (CPM) giúp đơn giản hóa quá trình quản lý phiên bản của các gói NuGet trên nhiều project trong cùng một solution. Thay vì phải khai báo và cập nhật phiên bản package riêng lẻ trong từng tệp .csproj của từng project, anh em có thể quản lý tất cả từ một tệp duy nhất là Directory.Packages.props, đặt ở cấp độ solution.
Tính năng này có sẵn trên tất cả các công cụ tích hợp NuGet, bắt đầu từ các phiên bản sau:
- Visual Studio 2022 17.2
- NET SDK 6.0.300
- nuget.exe 6.2.0
Việc sử dụng Centralized Package Management mang lại nhiều lợi ích đáng kể. Đầu tiên, nó đảm bảo tính nhất quán giữa các project khi tất cả đều sử dụng chung một phiên bản package, giúp tránh xung đột và lỗi không mong muốn. Thứ hai, việc bảo trì trở nên dễ dàng hơn, vì khi cần cập nhật phiên bản package, anh em chỉ cần thay đổi tại một nơi duy nhất thay vì chỉnh sửa từng tệp project riêng lẻ. Điều này cũng giúp giảm sự trùng lặp, loại bỏ việc phải khai báo phiên bản package nhiều lần trong các tệp .csproj, đồng thời cải thiện quá trình làm việc nhóm, giúp mọi thành viên trong nhóm luôn sử dụng chung một phiên bản package mà không lo nhầm lẫn hay sai sót.
Để sử dụng tính năng này, anh em chỉ cần tạo tệp Directory.Packages.props tại thư mục gốc của solution và định nghĩa các package trong đó bằng cách sử dụng PackageVersion thay vì PackageReference như trước đây. Sau đó, trong từng tệp .csproj, anh em chỉ cần khai báo package bằng PackageReference mà không cần chỉ định phiên bản, vì hệ thống sẽ tự động lấy thông tin từ tệp Directory.Packages.props.
Lấy ví dụ, nếu một solution có 10 project, tất cả đều sử dụng Newtonsoft.Json, việc cập nhật phiên bản theo cách thông thường đòi hỏi anh em phải sửa từng tệp .csproj.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" VersionOverride="11.0.0" />
<PackageReference Include="Serilog" />
</ItemGroup>
</Project>
Nhưng với Centralized Package Management, chỉ cần thay đổi phiên bản một lần duy nhất trong Directory.Packages.props, tất cả project sẽ tự động áp dụng phiên bản mới.
<Project>
<ItemGroup>
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
<PackageVersion Include="Serilog" Version="2.12.0" />
</ItemGroup>
</Project>
Để quản lý hiệu quả, anh em nên sắp xếp các package hợp lý, có thể thêm chú thích để dễ đọc, đồng thời commit tệp Directory.Packages.props vào Git để theo dõi thay đổi. Ngoài ra, việc cập nhật phiên bản định kỳ và kiểm tra kỹ sau mỗi lần cập nhật cũng rất quan trọng để đảm bảo hệ thống luôn hoạt động ổn định.
Tuy nhiên, Centralized Package Management chỉ được hỗ trợ từ .NET 6 trở lên và chỉ hoạt động với các project sử dụng PackageReference, không áp dụng cho những project vẫn sử dụng packages.config.
Nhìn chung, việc áp dụng Centralized Package Management trong .NET là một cách làm hiệu quả để duy trì tính nhất quán, giảm lỗi và tối ưu hóa quy trình quản lý dependency trong các giải pháp lớn.
Nếu anh em đang làm việc với nhiều project trong một solution, đây chắc chắn là một tính năng nên cân nhắc sử dụng!