[英]Constrain PackageReference upgrade version when update-package run
在用于 NuGet 的 .NET 较旧的packages.config
系统下, 我可以通过使用 Package 元素上的allowedVersions
属性来限制在更新包时考虑的包的可能版本
<package id="Newtonsoft.Json" version="10.0.3" allowedVersions="[10.0.3]" />
在 Visual Studio 中为包含上述内容的项目运行update-package
时, Newtonsoft.Json
不会发生更新,因为我已使用allowedVersions
属性固定到 10.0.3。
如何在PackageReference
下实现这一点? 将semver语法应用于 Version 属性只会影响恢复的版本 - 它不会限制更新。 因此,如果我指定以下PackageReference
并运行update-package
,例如,如果 11.0.1 在我的 NuGet 存储库中,我将升级到 11.0.1。
<PackageReference Include="Newtonsoft.Json" Version="[10.0.3]" />
我们依靠命令行工具来更新包,因为我们既有快速移动的内部包(一天更新多次)和更稳定的低移动包(例如:ASP.NET)。 在大型代码库中,在.csproj
文件中手动更新每个依赖项对我们来说根本无法扩展(并且容易出错)。 在packages.config
下,我们可以“固定”我们不想升级的第三方包,也可以更新到最新的快速移动依赖项。
从这个答案:
目前,这是不可能的。 请参阅此 GitHub 问题进行跟踪。
但是,用于添加引用的 cli 命令支持通过重新运行
dotnet add package The.Package.Id
来更新项目中的单个包。
来自GitHub 问题 4358 :
还没有
update
的PackageReference
替代品,修改引用的命令仅在dotnet
中。
您可能想要权衡关于此的开放功能请求GitHub 问题 4103 (4358 已作为副本关闭)。 Microsoft 并未高度重视此功能(最初于 2016 年 10 月开放)。
可以通过删除和添加引用来“更新”依赖项。 根据这篇文章,使用命令明确指定版本将安装确切的版本,而不是最新版本。 我还确认您可以使用以下命令添加版本约束:
dotnet remove NewCsproj.csproj package Newtonsoft.Json
dotnet add NewCsproj.csproj package Newtonsoft.Json -v [10.0.3]
你可以用这些命令做什么:
packages.config
)。.sln
文件来处理其中的每个项目。使用 MSBuild 从通用 MSBuild 文件中“导入”依赖项,您可以在一个位置更新版本。
您可以定义自己的<IncludeDependencies>
元素以包含每个项目的特定依赖项。
SomeProject.csproj
<Project Sdk="Microsoft.NET.Sdk">
<IncludeDependencies>Newtonsoft.Json;FastMoving</IncludeDependencies>
<Import Project="..\..\..\Dependencies.proj" />
...
</Project>
Dependencies.proj
<Project>
<ItemGroup>
<PackageReference Condition="$(IncludeDependencies.Contains('Newtonsoft.Json'))" Include="Newtonsoft.Json" Version="[10.0.3]" />
<PackageReference Condition="$(IncludeDependencies.Contains('FastMoving'))" Include="FastMoving" Version="3.332.0" />
</ItemGroup>
</Project>
这已经从https://github.com/NuGet/NuGet.Client/pull/2201开始实施。 如果您使用的是任何版本的 NuGet 5, PackageReference
semver 约束现在应该可以按预期工作。
这不会阻止更新,但如果这样做并更新,则会触发构建错误。 它对自动更新的用例没有多大帮助,但它可能会帮助其他进行手动更新并需要某种固定方式的人。
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="2.13.*" GeneratePathProperty="true" />
</ItemGroup>
<Target Name="CheckPkgVersions" AfterTargets="AfterBuild">
<Error Condition="!$(PkgMongoDB_Driver.Contains('2.13.'))" Text="MongoDB.Driver must remain at version 2.13.* to be compatible with MongoDB 3.4.21" />
</Target>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.