2014-01-30 42 views
10

在我们的构建环境中,我们遇到了一个问题,我们希望通过持续集成构建下载最新,最好的NuGet包,并通过适当地附加版本号-dev来标记为预发布。'nuget restore'如何下载预发布软件包?

无论何时我们运行命令nuget restore,它都无法获取任何预发布版本。我查看了NuGet Versioning页面上的文档,但它很不方便地忽略了如何将预发布范围添加到它应该在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文件本身?

非常感谢提前。

+0

你使用的是什么版本的NuGet客户端?什么服务器端软件(NuGet Gallery?Artifactory?MyGet?ProGet?) 这不仅仅是使用'-IncludePrerelease'标志吗? –

+0

我们使用的是NuGet客户端版本2.7.41115.310。在服务器端,我们在构建服务器上配置了一个简单的文件共享。这更多的是能够在我们的packages.config文件中提供一个基本的版本号,并且让NuGet能够从那里得到它。如果我们在packages.config中提供一个非标签/发行版本号,即使使用'IncludePrerelease',它也不会更新到预发行版包,从我迄今为止所做的测试中。 –

回答

10

AFAIK无法指定在packages.config中使用预发布软件包。相反,使用-InstallPrerelease标志(PowerShell)或Prerelease标志(命令行nuget.exe)指定应优先于稳定包安装预发行版/测试版软件包。

注意Foo.1.0.0-dev1234被认为Foo.1.0.0,因此,如果稳定包存在(Foo.1.0.0),那么任何Foo.1.0.0-xxxx测试/预发行版本的软件包将不会安装。在这种情况下,您需要将测试版上传到(比如说)Foo.1.0.1-devxxxx,因为它被发现为比“Foo.1.0.0”更新的版本。

在这里看到更多细节:How to publish nuget prerelease version package

+0

PowerShell和nuget.exe的建议只会检索最新的预发布版。您无法将特定版本的预发布作为目标。我想我坚持写这个脚本。见https://github.com/NuGet/Home/issues/503 – DannyMeister

0

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

1

为了表明一个预发布版本,一定要谱写它在packages.config版本:

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

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

要检查预发行软件包(不仅仅是稳定版本)的更新,在“管理NuGet软件包”对话框中,在标记为“仅稳定”的下拉列表中选择“包括预发行”。