问题 如何'nuget restore'下载预发布包?


我们在构建环境中面临一个问题,我们希望我们的持续集成构建能够通过适当地附加版本号来下载标记为预发布的“最新且最好的”NuGet包。 -dev

每当我们运行命令 nuget restore,它无法获得任何预发布版本。我查看了有关的文档 NuGet版本控制 页面,但它相当不方便地省略了有关如何将预发布范围添加到它应在packages.config文件中下载的允许版本的详细信息。

目前,packages.config文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Foo" version="1.0.0" targetFramework="net35" />
</packages>

我们希望NuGet能够至少能够看到然后从以下列表中选择最新版本:

  • Foo.1.0.0-dev1401291727ef87505.nupkg
  • Foo.1.0.0-dev14012918064fdf488.nupkg

遗憾的是,没有看到预发布版本,恢复过程只使用“已发布”的软件包。尝试下载仅预发布包时的典型错误消息是:

Unable to find version '1.0.0' of package 'Foo'.

有没有什么方法可以在packages.config文件中指定包含预发布包的一系列版本?甚至是从.nuspec文件本身?

提前谢谢了。


4872
2018-01-30 05:37


起源

您使用的是什么版本的NuGet客户端?什么是服务器端软件(NuGet Gallery?Artifactory?MyGet?ProGet?)这不仅仅是使用 -IncludePrerelease 旗? - Matthew Skelton
我们使用的是NuGet客户端版本2.7.41115.310。在服务器端,我们在构建服务器上配置了一个简单的文件共享。这更像是能够在packages.config文件中提供基本版本号以及NuGet从那里开始工作的情况。如果我们在packages.config中提供非标记/发布版本号,即使使用 IncludePrerelease从我到目前为止所做的测试来看,它不会更新到预发布包。 - Aaron Cunnington


答案:


AFAIK无法指定在其中使用预发布包 packages.config。相反,使用 -InstallPrerelease 标志(PowerShell)或 Prerelease flag(命令行nuget.exe)指定应该安装pre-release / beta软件包而不是稳定软件包。

注意 Foo.1.0.0-dev1234 被认为  比 Foo.1.0.0,所以如果存在稳定的包(Foo.1.0.0)然后任何 Foo.1.0.0-xxxx 不会安装beta / pre-release软件包。在这种情况下,您需要将测试版升级到(比方说) Foo.1.0.1-devxxxx 因为它被发现比'更新' Foo.1.0.0

有关详细信息,请参见此处 如何发布nuget预发行版本包


11
2018-02-06 02:14



PowerShell和nuget.exe的建议只会检索最新的预发布版本。您无法针对特定版本定位预发布。我想我已经陷入困境了。看到 github.com/NuGet/Home/issues/503 - DannyMeister


要指明预发布版本,请务必在packages.config版本中对其进行标注:

<package id="Foo" version="1.0.0-dev1401291727ef87505" />

使用allowedVersions属性指定版本范围。

要检查预发布包的更新(不仅仅是稳定),请在“管理NuGet包”对话框中,在标有“仅稳定”的下拉列表中选择“包含预发行”。


1
2018-04-24 18:17





nuget.exe restore 将下载packages.config文件中指定的确切版本。你将不得不使用 update-package 将已安装的软件包更新到最新版本。


0
2018-02-04 05:33