我很难让我的项目在重建时更新我们的内部nuget包。我们有几个核心参考库,每当构建依赖它的项目时,我们需要保持最新。
我正在使用Visual Studio 2017和nuget 4.7.1
我已将有问题的项目转换为使用包引用方法而不是package.config,但它在项目文件中生成的详细信息与教程所说的不同。
这是我在项目文件中得到的内容:
<PackageReference Include="SMSCore">
<Version>10.5.0</Version>
</PackageReference>
<PackageReference Include="STMICore">
<Version>10.5.0</Version>
</PackageReference>
nuget文档说明了这一点:
<!-- Accepts any 6.x.y version. -->
<PackageReference Include="ExamplePackage" Version="6.*" />
<PackageReference Include="ExamplePackage" Version="[6,7)" />
https://docs.microsoft.com/en-us/nuget/reference/package-versioning
我试过改变我的项目文件看起来像参考资料。 我试过以项目文件开始的格式使用版本控制方法。
似乎没有什么工作。 也许我在查看错误的文档? 我很擅长定义和使用nuget存储库,所以如果它很简单,我也不会感到惊讶。
任何帮助将不胜感激。谢谢。
我想我需要知道的是,在构建项目时是否可以让项目更新所有相关的nuget包?
如果您使用的是package.config
,则可以非常轻松地更新其所有相关的nuget包。我们只需要添加一个预构建事件来更新它:
<YourNuGetCLIPath>\nuget.exe update "YourSolutionFile.sln or PackageId"
查看update command (NuGet CLI)了解更多详情。
如果你使用PackageReference
,它会变得有点复杂。那是因为NuGet.exe
update does not support PackageReference
。在这种情况下,我们必须使用浮动版本来自动更新包(您在问题中提到),但它不适用于所有相关的nuget包,因此浮动版本似乎也不适合您。更重要的是,如果您使用PackageReference
,NuGet包管理UI上还有另一个问题:
NuGet Build Integrated Project handling of floating versions and ranges in Visual Studio Client
此外,如果您的项目类型是SDK <Project Sdk="Microsoft.NET.Sdk">
,还有另一种解决方法是使用PackageReference
更新其所有依赖的nuget包,您可以使用dotnet add
在预构建事件中更改PackageReference
的版本:
dotnet add "$(ProjectPath)" package PackageID
如果您使用的是non-SDK
+ PackageReference
,我还没有找到任何有效的解决方法。
所以,如果使用package.config
没有限制,我认为package.config
最适合你。
希望这可以帮助。