是否可以对 csproj 文件中的多个依赖项使用相同版本?

lit*_*tex 5 c# csproj

我有一个 C# 项目 (.NET6),如下所示:

项目.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    ...
  </PropertyGroup>
  ...
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.0" />
    ...
  </ItemGroup>
  ...
</Project>
Run Code Online (Sandbox Code Playgroud)

是否可以以某种方式将这些依赖版本维护在一个地方(它们都属于在一起)?与Maven 允许使用属性
类似吗?

问题是,当我想更新时 - 例如6.0.1- 我总是必须立即更新所有依赖项版本。当使用像Dependabot这样的自动化工具时,这尤其是一个问题,因为它们通常为每个依赖项创建一个拉取请求,因为它们无法识别这些依赖项属于同一组。

我也检查过,但到目前为止,无论是在 StackOverflow 还是在Microsoft 文档中都没有找到任何其他解决方案。

PMF*_*PMF 3

是的,这有效。只需使用版本变量即可。

就像这样:


  <PropertyGroup>
    <EntityFrameworkVersion>6.0.0</EntityFrameworkVersion>
  </PropertyGroup>

<ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="$(EntityFrameworkVersion)" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(EntityFrameworkVersion)" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="$(EntityFrameworkVersion)" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="$(EntityFrameworkVersion)" />
    ...
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

现在您只需编辑一行即可更新版本。我通常甚至将变量定义移至顶级Directory.build.props文件,这样我只需编辑一行即可更新解决方案中所有项目的版本。

此解决方案可能存在两个问题:

  • 我不确定(也从未真正测试过)dependabot 是否能够解决这个问题。可能不是。
  • 根据经验,当解决方案很大时(许多项目都具有此依赖性),更新文件Directory.build.props通常会导致 Visual Studio 崩溃。不过,在更改版本之前关闭它时,一切都很好。