NuGet限制包的最大主版本号

15

如何告诉NuGet,你想要使用特定主版本的包的最新版本,并且永远不要超过这个主版本呢?

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

我们知道,当前可用的(并默认在“管理NuGet程序包”对话框中提供的)jQuery版本是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个回答

28
我找到了一个解决方案。您需要使用NuGet 版本约束
继续以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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接