此问题特定于 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
可用的套餐是:
我想nuget解决依赖关系并选择MyPackageA版本1.2.8。
示例#2
可用的套餐是:
我想nuget解决依赖关系并选择MyPackageA版本1.2.9-dev2。
但是,它只会在两个示例中解析为1.2.8版(稳定版)。
有没有办法告诉MyPackageA
或MSBuild
是否包含预发布包?
答案 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 restore中添加了选项-IncludePrerelease
或PreRelease
,然后收到错误消息:
未知选项:' - IncludePrerelease'
此外,当我们使用nuget.exe restoe
或MSBuild.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.*-*" />