【问题标题】:NuGet Limit max major version of a packageNuGet 限制包的最大主要版本
【发布时间】:2014-11-14 10:44:56
【问题描述】:

是否可以告诉 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>

并构建项目。

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

默认情况下,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).

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

【问题讨论】:

    标签: .net visual-studio package nuget


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-05-14
      • 2019-05-13
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2017-06-29
      • 2017-07-13
      • 1970-01-01
      相关资源
      最近更新 更多