如何在MSBuild还原目标

时间:2018-04-19 09:37:52

标签: msbuild visual-studio-2017 nuget nuget-package-restore

此问题特定于 MSBuild 15.1 +(Visual Studio 2017) PackageReference ,这是Nuget完全集成在{{{ 1}}。

在我的持续集成脚本中,我有类似的内容:

MSBuild

其中一个MSBuild.exe /t:Restore MySolution.sln /p:RestoreConfigFile=NuGet.config 文件包含:

csproj

<PackageReference Include="MyPackageA"> <Version>1.2.*</Version> </PackageReference> 是一个内部包,我想nuget解析对最新版本的引用,包括预发布版本。

让我们举两个例子:

示例#1

可用的套餐是:

  • MyPackageA版本1.2.7-dev1
  • MyPackageA版本1.2.7-dev2
  • MyPackageA版本1.2.7-dev3
  • MyPackageA版本1.2.8

我想nuget解决依赖关系并选择MyPackageA版本1.2.8。

示例#2

可用的套餐是:

  • MyPackageA版本1.2.7-dev1
  • MyPackageA版本1.2.7-dev2
  • MyPackageA版本1.2.7-dev3
  • MyPackageA版本1.2.8
  • MyPackageA版本1.2.9-dev1
  • MyPackageA版本1.2.9-dev2

我想nuget解决依赖关系并选择MyPackageA版本1.2.9-dev2。

但是,它只会在两个示例中解析为1.2.8版(稳定版)。

有没有办法告诉MyPackageAMSBuild是否包含预发布包?

3 个答案:

答案 0 :(得分:4)

目前,预发布版本不能与浮动版本一起使用。

您可以使用

<PackageReference Include="mypk" Version="1.0.*" />

OR

<PackageReference Include="mypk" Version="1.0.1-*" />

但不是1.0.*-*

请参阅跟踪此功能请求的this GitHub issue

答案 1 :(得分:1)

  

如何在MSBuild还原目标中包含预发布包

AFAIK,没有用于nuget恢复的选项-IncludePrerelease,您可以查看Options for restore command。并且MSBuild还原也没有此选项MSBuild restore target

此选项用于nuget InstallUpdate

作为测试,我在命令行nuget restore中添加了选项-IncludePrereleasePreRelease,然后收到错误消息:

  

未知选项:' - IncludePrerelease'

enter image description here

此外,当我们使用nuget.exe restoeMSBuild.exe /t:Restore恢复nuget包时,nuget将根据{{1}中的包列表下载并安装packages文件夹中缺少的所有包。 }和packages.config,版本信息在这些文件中指示,如:

PackageReference

<package id="ExamplePackage" version="6.1.0" targetFramework="net45"/>

NuGet将下载相应版本的软件包,因此我们不需要提供<PackageReference Include="ExamplePackage" Version="6.1" /> 选项。

<强>更新

  

我应该提到我的参考包括一个通配符,我会   喜欢那个解析到最新版本的通配符,包括一个   预发布版本,如果它是最新版本。

确实,这是关于-IncludePrerelease的恢复预发布包的问题:

https://github.com/NuGet/Home/issues/912

您可以跟踪此主题以获取此问题的最新状态,并且NuGet团队已将此问题设置为pri 0,并尝试尽快解决此问题。

希望这有帮助。

答案 2 :(得分:0)

NuGet,版本 >5.6,浮动版本语法允许一些非常强大的版本范围,但以下 3 个浮动版本很可能满足您的方案:

<!-- Float everything! Latest version available including prerelease-->
<PackageReference Include="mypk" Version="*-*" />

<!-- Prefer latest 1.X version, include prerelease and stable -->
<PackageReference Include="mypk" Version="1.*-*" />

<!-- Prefer latest 1.0.X version, include prerelease and stable -->
<PackageReference Include="mypk" Version="1.0.*-*" />

Ref