NuGet限制包的最大主要版本

Ale*_*mov 11 .net jquery package visual-studio nuget

是否有可能告诉NuGet你想使用最新版本的软件包和特定的主要版本,而不是高于这个主要版本?

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

我们知道jQuery 的当前可用(并且默认情况下在Manage Nuget Packages对话框中提供)版本是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>
Run Code Online (Sandbox Code Playgroud)

并构建项目.

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

NuGet加载项如何通知新版本的软件包

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

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

我试图在package version属性中使用星号:

<packages>
  <package id="Package1" version="1.*" targetFramework="net40" />
</packages>
Run Code Online (Sandbox Code Playgroud)

但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).
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*mov 19

我找到了解决方案.您需要使用NuGet 版本约束.

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

<packages>
  <package id="jQuery" version="1.11.0" allowedVersions="[1,2)" targetFramework="net451" />
</packages>
Run Code Online (Sandbox Code Playgroud)

这样,您只会收到有关1.x版本的新版本的通知,并且永远不会提供更新为不适合您的2.x版本:

在此输入图像描述