是否可以在一个 csproj 文件中对多个依赖项使用相同的版本?
Is it possible to use the same version for multiple dependencies in a csproj file?
我有一个如下所示的 C# 项目 (.NET6):
project.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>
是否有可能在一个地方维护这些依赖版本(它们都属于一起)?
类似于例如?
问题是当我想更新时——例如到 6.0.1
- 我总是必须一次更新所有依赖版本。当使用像 Dependabot 这样的自动工具时,这尤其是一个问题,因为它们通常会为每个依赖项创建一个拉取请求,因为它们无法识别这些依赖项属于一起。
我也检查过,但到目前为止我没有找到任何其他解决方案,无论是在 Whosebug 还是 Microsoft docs。
是的,行得通。只需为版本使用一个变量。
像这样:
<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>
现在您只需编辑一行即可更新版本。我通常甚至将变量定义移动到顶级 Directory.build.props
文件,这样我只需要编辑一行即可更新解决方案中所有项目的版本。
此解决方案可能存在两个问题:
- 我不确定(而且从未真正测试过)dependabot 是否能够解决这个问题。可能不是。
- 根据经验,当解决方案很大时(许多项目具有这种依赖性)更新
Directory.build.props
文件通常会崩溃 Visual Studio。不过,在更改版本之前关闭它时,一切都很好。
首先,您可以简化您的引用,因为其他 2 个 are dependencies 将被自动包含。
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.0" />
</ItemGroup>
如果您确实希望他们共享版本,您可以为版本定义一个属性:
<PropertyGroup>
<EfVersion>6.0.0</EfVersion>
<PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(EfVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="$(EfVersion)" />
</ItemGroup>
但是,我不推荐这样做 - 一旦您使用任何工具(如 Nuget 包管理器)更新这些引用,您可能 运行 会遇到问题(从内存中它将替换EfVersion
使用具体版本,但这将是特定于工具的实现细节)。
我有一个如下所示的 C# 项目 (.NET6):
project.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>
是否有可能在一个地方维护这些依赖版本(它们都属于一起)?
类似于例如
问题是当我想更新时——例如到 6.0.1
- 我总是必须一次更新所有依赖版本。当使用像 Dependabot 这样的自动工具时,这尤其是一个问题,因为它们通常会为每个依赖项创建一个拉取请求,因为它们无法识别这些依赖项属于一起。
我也检查过,但到目前为止我没有找到任何其他解决方案,无论是在 Whosebug 还是 Microsoft docs。
是的,行得通。只需为版本使用一个变量。
像这样:
<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>
现在您只需编辑一行即可更新版本。我通常甚至将变量定义移动到顶级 Directory.build.props
文件,这样我只需要编辑一行即可更新解决方案中所有项目的版本。
此解决方案可能存在两个问题:
- 我不确定(而且从未真正测试过)dependabot 是否能够解决这个问题。可能不是。
- 根据经验,当解决方案很大时(许多项目具有这种依赖性)更新
Directory.build.props
文件通常会崩溃 Visual Studio。不过,在更改版本之前关闭它时,一切都很好。
首先,您可以简化您的引用,因为其他 2 个 are dependencies 将被自动包含。
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="6.0.0" />
</ItemGroup>
如果您确实希望他们共享版本,您可以为版本定义一个属性:
<PropertyGroup>
<EfVersion>6.0.0</EfVersion>
<PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(EfVersion)" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="$(EfVersion)" />
</ItemGroup>
但是,我不推荐这样做 - 一旦您使用任何工具(如 Nuget 包管理器)更新这些引用,您可能 运行 会遇到问题(从内存中它将替换EfVersion
使用具体版本,但这将是特定于工具的实现细节)。