Dot-Net
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 版本時一樣:
預設情況下,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 版本:

