Dot-Net

NuGet 限制包的最大主要版本

  • May 21, 2021

是否可以告訴 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 版本時一樣:

NuGet 載入項如何通知包的新版本

預設情況下,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版本約束

繼續 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 版本:

在此處輸入圖像描述

引用自:https://stackoverflow.com/questions/25940684