[英]Is there a way to update nuget package with multiple interdependent dependencies to a newer version in an old csproj format project?
[英]Is it possible to use the same version for multiple dependencies in a csproj file?
我有一个看起来像这样的 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>
是否有可能在一个地方维护这些依赖版本(它们都属于一起)?
类似于Maven 通过使用属性允许什么?
问题是当我想更新时——例如更新到6.0.1
我总是必须一次更新所有依赖版本。 这在使用像Dependabot这样的自动工具时尤其成问题,因为它们通常为每个依赖项创建一个拉取请求,因为它们无法识别这些依赖项属于一起。
我也检查了,但到目前为止我没有找到任何其他解决方案,无论是在 StackOverflow 还是在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
文件,这样我只需要编辑一行来更新解决方案中所有项目的版本。
此解决方案有两个可能的问题:
Directory.build.props
文件通常会使 Visual Studio 崩溃。 不过,在更改版本之前关闭它,一切都很好。首先,您可以简化您的引用,因为其他两个是依赖项,将自动包含在内。
<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 Package Manager)来更新这些参考,您可能会遇到问题(从EfVersion
到具体版本)是特定于工具的实现细节)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.