.NET 等同于 Maven Parent Pom / Dependency Management

.NET equivalent of Maven Parent Pom / Dependency Management

.NET 中是否有与这些 Maven 功能等效的功能?例如,我有这个:

A.sln
    Proj1.csproj
        <PackageReference="Something" Version="1.2.3"/>
    Proj2.csproj
        <PackageReference="Something" Version="1.2.3"/>

我想要一种一致的方式来确保他们对 Something 使用 相同的 版本。我试过使用 Version.props 并在每个 .csproj 中导入它,但它不如父 pom 中的 Maven BOMs / dependencyManagment 部分优雅或漂亮。

是否有更标准的方法?

Directory.Build.targets 就是您要找的。它允许您以一种流向所有项目的方式设置解决方案范围的包版本(以及其他任何版本)。

在你的例子中,你有:

A.sln
Directory.Build.targets

    Proj1.csproj
        <PackageReference Include="Something" />
    Proj2.csproj
        <PackageReference Include="Something" />

其中 Directory.Build.targets 包含:

<Project>
  <ItemGroup>
    <PackageReference Update="Something" Version="1.2.3" />
  </ItemGroup>
</Project>

注意 Update="Something"(而不是 Include)的使用,以及每个项目的 PackageReferences 中缺少指定版本。

这种方法对于跨多个项目设置包版本非常有用,但它可以做的不止于此。我还用它在每个项目中包含相同的代码分析规则,并在一个地方为所有项目设置 C# 语言版本。如果您想在所有项目中对其进行标准化,则每个项目 .csproj 文件中的任何内容都可以移至 Directory.Build.targets