2014-09-19 118 views
7

是否有可能告訴NuGet,您想要使用最新版本的包與特定主版本,並且永遠不會超出此主要版本?NuGet限制包的最大主版本

舉個例子,我們以jQuery爲例:如果我們需要支持舊瀏覽器,我們不能使用2.x版本。我們僅限於使用最新的1.x版本。

我們知道當前可用的(並且默認提供的管理Nuget包對話框)jQuery的版本是2.1.1。我們不需要使用這個版本,而是使用當前最新的jQuery 1.x分支的主要版本,目前是1.11.1。

我知道如何在最初安裝1.11.1版本。一個簡單的解決方法是手動編輯packages.config文件,1.11.1更換version屬性的值:

<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). 

那麼,你如何實現上述目標?

回答

13

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