.net - NuGet 限制包的最大主要版本

标签 .net visual-studio package nuget

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

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

最佳答案

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

关于.net - NuGet 限制包的最大主要版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25940684/

相关文章:

java - 如何用 if-else 或 try-catch 结构包围 Java 语句?

c# - 将 Attribute with AttributeTargets = Method 应用于类中的所有方法

c++ - 为什么我在 Visual Studio 的 OpenCV 项目中使用/MT 时仍然需要 dll?

c++ - 减少 STL 类型调试 View 中的噪音

r - 在 R 中,您可以允许用户仅从某些函数导入命名空间吗?

delphi - 哪个声明导致单元被隐式导入?

c# - 找不到正确的方法来调用延迟的 LINQ 语句

.net - 存储过程中END之后的语句是否执行?

c# - .NET 类库中的 IAudioEndpointVolume 位于何处?

r - 如何查找包所需的 R 版本