2014-09-19 16 views
7

È possibile dire a NuGet che si desidera utilizzare l'ultima versione del pacchetto con la versione principale particolare e mai al di sopra di questa versione principale?NuGet Limit max versione principale di un pacchetto

Ad esempio, prendiamo l'esempio con jQuery: non possiamo usare la versione 2.x se abbiamo bisogno del supporto dei vecchi browser. Siamo limitati a utilizzare la versione 1.x più recente.

Sappiamo che la versione attualmente disponibile (e offerta di default nella finestra di dialogo Gestisci pacchetti Nuget) di jQuery è 2.1.1. Anziché utilizzare questa versione, è necessario utilizzare la versione principale attualmente più recente del ramo jQuery 1.x, attualmente 1.11.1.

So come installare inizialmente la versione 1.11.1. Una soluzione semplice è quella di modificare manualmente il file packages.config per sostituire il valore dell'attributo version con 1.11.1:

<packages> 
    <package id="jQuery" version="1.11.1" targetFramework="net451" /> 
</packages> 

e generare il progetto.

Quello che non so è come dire a NuGet di tenere traccia del rilascio di nuove versioni del ramo 1.x per offrirmi l'aggiornamento a loro nello stesso modo in cui lo farebbe quando una nuova versione 2.x è liberare:

How NuGet Add-In notifies of a new version of a package

per impostazione predefinita, NuGet sarà sempre cercare di aggiornare all'ultima versione 2.x, non l'ultima 1.x.

In altre parole, quando si utilizzano pacchetti con vecchie versioni principali, è necessario controllare manualmente le versioni e fare in modo che NuGet le installi ogni volta.

Ho cercato di utilizzare un asterisco nel pacchetto version attributo:

<packages> 
    <package id="Package1" version="1.*" targetFramework="net40" /> 
</packages> 

Ma NuGet genera un'eccezione:

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

Quindi, come si fa a raggiungere l'obiettivo di cui sopra?

risposta

13

Ho trovato una soluzione. È necessario utilizzare NuGet version constraint.

Continuando con l'esempio jQuery, se è necessario aggiornare jQuery alla versione più recente ramo 1.x, ma non per 2.x, aggiungere il seguente vincolo alla packages.config:

<packages> 
    <package id="jQuery" version="1.11.0" allowedVersions="[1,2)" targetFramework="net451" /> 
</packages> 

Questo ti permette di essere informato sulle nuove uscite del ramo 1.x essere offerto solo e mai per aggiornare a inadeguato per voi 2.x versione:

enter image description here

Problemi correlati