2014-09-19 85 views
7

是否有可能告诉NuGet,您想要使用最新版本的包与特定主版本,并且永远不会超出此主要版本?NuGet限制包的最大主版本

举个例子,我们以jQuery为例:如果我们需要支持旧浏览器,我们不能使用2.x版本。我们仅限于使用最新的1.x版本。

我们知道当前可用的(并且默认提供的管理Nuget包对话框)jQuery的版本是2.1.1。我们不需要使用这个版本,而是使用当前最新的jQuery 1.x分支的主要版本,目前是1.11.1。

我知道如何在最初安装1.11.1版本。一个简单的解决方法是手动编辑packages.config文件,1.11.1更换version属性的值:

<packages> 
    <package id="jQuery" version="1.11.1" targetFramework="net451" /> 
</packages> 

并生成项目。

我不知道的是如何告诉NuGet跟踪发布1.x分支的新版本,以便为它们提供更新,就像在新的2.x版本是发布:

How NuGet Add-In notifies of a new version of a package

默认的NuGet将始终尝试更新到最新的2.x版,而不是最新1.x的

换句话说,当使用旧主版本的软件包时,您需要手动检查版本,并使NuGet每次都安装它们。

我试图使用包装的星号version属性:

<packages> 
    <package id="Package1" version="1.*" targetFramework="net40" /> 
</packages> 

不过的NuGet抛出异常:

NuGet Package restore failed for project Project1: System.IO.InvalidDataException: Unable to parse version value '1.*' from 'packages.config'. 
    at NuGet.PackageReferenceFile.<GetPackageReferences>d__0.MoveNext() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 
    at NuGet.VsEvents.PackageRestorer.RestorePackages(String packageReferenceFileFullPath, IFileSystem fileSystem) 
    at NuGet.VsEvents.PackageRestorer.PackageRestore(ProjectPackageReferenceFile projectPackageReferenceFile). 

那么,你如何实现上述目标?

回答

13

我找到了一个解决方案。您需要使用NuGet version constraint

与jQuery的例子继续,如果您需要更新的jQuery最新的1.x版本的分支,而不是2.x中,以下约束添加到packages.config:

<packages> 
    <package id="jQuery" version="1.11.0" allowedVersions="[1,2)" targetFramework="net451" /> 
</packages> 

这可让您得到有关1.x分支的新版本的通知,并且永远不会向您提供更新以适合您2.x版本:

enter image description here