NuGet限制包的最大主要版本

时间:2014-09-19 18:57:37

标签: jquery .net visual-studio package nuget

是否有可能告诉NuGet您要使用最新版本的软件包与特定主要版本并且从不高于此主要版本?

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

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

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

<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).

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

1 个答案:

答案 0 :(得分:18)

我找到了解决方案。您需要使用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