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

How to include pre-release packages with MSBuild restore target

此问题特定于 MSBuild 15.1+ (Visual Studio 2017)PackageReference,这是新方法Nuget 完全集成在 MSBuild 中。

在我的持续集成脚本中,我有类似的东西:

MSBuild.exe /t:Restore MySolution.sln /p:RestoreConfigFile=NuGet.config

其中一个 csproj 文件包含:

<PackageReference Include="MyPackageA">
    <Version>1.2.*</Version>
</PackageReference>

MyPackageA 是一个内部包,我希望 nuget 解析对可用最新版本的引用,包括预发布版本。

举两个例子:

示例 #1

可用的套餐有:

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

示例 #2

可用的套餐有:

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

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

有没有办法告诉 MSBuildNuget 包含预发布包?

How to include pre-release packages with MSBuild restore target

AFAIK,nuget 恢复没有这样的选项 -IncludePrerelease,你可以检查 Options for restore command. And MSBuild restore also does not have this option, MSBuild restore target

此选项用于 nuget Install, Update

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

Unknown option: '-IncludePrerelease'

此外,当我们用nuget.exe restoeMSBuild.exe /t:Restore恢复nuget包时,nuget会根据packages文件夹中的包列表下载并安装任何缺少的包。 18=]和PackageReference,版本信息在那些文件中指示,如:

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

<PackageReference Include="ExamplePackage" Version="6.1" />

NuGet会下载对应版本的包,所以我们不需要给选项-IncludePrerelease

更新:

I should have mentioned my reference includes a wildcard and I would like that wildcard to resolve to the latest version, including a pre-release version if it's the latest.

的确,这是关于 PackageReference:

恢复预发布包的问题

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

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

希望这对您有所帮助。

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

您可以使用

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

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

但不是 1.0.*-*

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

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