中央包管理
https://learn.microsoft.com/zh-cn/nuget/consume-packages/central-package-management
启用中央软件包管理
若要开始使用中央包管理,请在存储库的根目录中创建一个 Directory.Packages.props 文件,并将 MSBuild 属性 ManagePackageVersionsCentrally 设置为 true。
可以手动创建它,或使用 .NET CLI:
shell
dotnet new packagesprops在内部 Directory.Packages.props,定义 <PackageVersion /> 元素以指定项目使用的包 ID 和版本。
XML
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="PackageA" Version="1.0.0" />
<PackageVersion Include="PackageB" Version="2.0.0" />
</ItemGroup>
</Project>在每个项目文件中,定义 <PackageReference /> 不带特性的 Version 元素。 版本将从相应的 <PackageVersion /> 条目中 Directory.Packages.props解析。
XML
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="PackageA" />
</ItemGroup>
</Project>现在,你正在使用中央包管理和在中心位置管理版本!
中央包管理规则
该文件 Directory.Packages.props 具有有关其位置和上下文在存储库中的特定规则。 默认情况下,仅计算给定项目的一 Directory.Packages.props 个文件。
如果存储库中有多个 Directory.Packages.props 文件,则会评估离给定项目的目录最近的文件。 这允许在存储库的各个级别进行额外的控制。
请考虑以下存储库目录结构:
📂 (root)
├─📄 Directory.Packages.props
|
├─📂Solution1
| ├─ 📄Directory.Packages.props
| |
| └─ 📂 Project1
| └─📄Project1.csproj
|
└─ 📂 Solution2
└─ 📂 Project2
└─ 📄 Project2.csprojProject1.csproj Directory.Packages.props将使用目录中的文件Repository\Solution1\。 如果要包含父级的 Directory.Packages.props设置,则必须手动导入它。
XML
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Packages.props, $(MSBuildThisFileDirectory)..))" />
<ItemGroup>
<PackageVersion Update="Newtonsoft.Json" Version="12.0.1" />
</ItemGroup>
</Project>Project2.csproj 将评估 Directory.Packages.props 根目录中的文件。
注意
MSBuild 只会自动导入在项目目录或任何父目录中找到的第一个 Directory.Packages.props 文件。 如果有多个此类文件,则必须根据需要手动导入父文件。