如何将预发布包包含在 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
可用的套餐有:
- 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(稳定版本)。
有没有办法告诉 MSBuild
或 Nuget
包含预发布包?
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 restore 中添加了选项 -IncludePrerelease
或 PreRelease
,然后我收到了错误消息:
Unknown option: '-IncludePrerelease'
此外,当我们用nuget.exe restoe
或MSBuild.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.*-*" />
此问题特定于 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
可用的套餐有:
- 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(稳定版本)。
有没有办法告诉 MSBuild
或 Nuget
包含预发布包?
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 restore 中添加了选项 -IncludePrerelease
或 PreRelease
,然后我收到了错误消息:
Unknown option: '-IncludePrerelease'
此外,当我们用nuget.exe restoe
或MSBuild.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.*-*" />