Skip to content

中央包管理

https://learn.microsoft.com/zh-cn/nuget/consume-packages/central-package-management

启用中央软件包管理

若要开始使用中央包管理,请在存储库的根目录中创建一个 Directory.Packages.props 文件,并将 MSBuild 属性 ManagePackageVersionsCentrally 设置为 true

可以手动创建它,或使用 .NET CLI:

shell

shell
dotnet new packagesprops

在内部 Directory.Packages.props,定义 <PackageVersion /> 元素以指定项目使用的包 ID 和版本。

XML

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

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.csproj

Project1.csproj Directory.Packages.props将使用目录中的文件Repository\Solution1\。 如果要包含父级的 Directory.Packages.props设置,则必须手动导入它。

XML

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 文件。 如果有多个此类文件,则必须根据需要手动导入父文件。

上次更新时间:

最近更新