2014-04-30 21 views
6

Quindi ho un pacchetto, NServiceBus.Host che dipende da NServiceBus> = 4.5.0.NuGet risolve la versione errata della dipendenza del pacchetto

Su nuget è disponibile una versione 4.5.1 di NServiceBus. Quando si installa pacchetto NServiceBus.Host ottengo:

PM> install-package nservicebus.host 
Attempting to resolve dependency 'NServiceBus (≥ 4.5.0)'. 
Attempting to resolve dependency 'NServiceBus.Interfaces (≥ 4.5.0)'. 
Installing 'NServiceBus.Interfaces 4.5.0'. 
You are downloading NServiceBus.Interfaces from NServiceBus Ltd, the license agreement to which is available at http://particular.net/LicenseAgreement. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device. 
Successfully installed 'NServiceBus.Interfaces 4.5.0'. 
Installing 'NServiceBus 4.5.0'. 

Come potete vedere ho la versione 4.5.0 della dipendenza.

Nel nuget doco si afferma:

Se la dipendenza non è installato, NuGet passa attraverso le seguenti operazioni:

NuGet enumera tutte le versioni di Subkismet all'interno del feed che è all'interno della specifica versione . NuGet quindi restringe quello impostato su solo i pacchetti con la versione minore/minore più bassa. Dei restanti pacchetti , NuGet sceglie quello con il numero di versione più alto.

"NuGet sceglie quello con il numero di versione più alto." sembra essere violato qui poiché non c'è mai una versione.

Si tratta di un errore in NuGet?

+0

vi siete persi un po 'quando si requoted parte della documentazione se il penultimo comma: "* Dei rimanenti pacchetti *, NuGet sceglie quella con il più alto numero di versione" - Ci può essere un numero di versione più alto attivo nel repository NuGet, ma questo non è il numero più alto a cui fa riferimento il pacchetto o le sue dipendenze. –

+0

Ma in questo caso entrambi i 4.5.0 e 4.5.1 dovrebbero essere inclusi in quel set di pacchetti rimanenti, giusto? –

risposta

9

La documentazione NuGet sulla risoluzione delle dipendenze si fa riferimento a non è stato aggiornato dal dicembre 2010. I veri documenti Nuget sono disponibili qui: https://docs.nuget.org

Inoltre, NuGet sarà - di default - risolvere la versione major.minor più basso all'interno dell'intervallo consentito, come definito nelle dipendenze del pacchetto. Quindi 4.5.0 è una risoluzione di dipendenza predefinita corretta.

Nuovo dal NuGet v2.8.1: è possibile utilizzare un algoritmo di risoluzione delle dipendenze si alternano utilizzando il NuGet Package Manager Console:

Installare-Pacchetto NServiceBus.Host -DependencyVersion HighestPatch

Ci sono più opzioni, controllare i documenti qui: https://docs.nuget.org/docs/reference/package-manager-console-powershell-reference#Install-Package

+0

Grazie, possiamo aspettarci che HighestPatch diventi la strategia predefinita in futuro? –

+0

Non è sufficiente cancellare la documentazione di codeplex? –

+0

Puoi specificarlo solo con PowerShell? Non vedo l'opzione sul prompt dei comandi regolare. –

3

Come detto da Xavier, questo sembra un comportamento predefinito. Tuttavia, la documentazione dice che è possibile modificare il comportamento predefinito modificando la configurazione di nuget:

Specifica la versione del pacchetto di dipendenze da selezionare dall'elenco di pacchetti di dipendenze validi. Il valore di defult è il più basso. È possibile ignorare questo valore predefinito specificando un nuovo valore di default nel file di nuget.config:

<configuration> 
    <config> 
     <add key="DependencyVersion" value="HighestPatch" /> 
    </config> 
</configuration> 

ho modificato il mio file di configurazione come descritto nella documentazione:

%AppData%\Nuget\NuGet.Config 

funziona allora in PowerShell ma NON in un normale prompt dei comandi.

La documentazione dice anche:

Ciò che è strano è che la documentazione dice che pre 2.7.2 il default era HighestPatch ...

Si noti che per NuGet 2.7.2 o versioni precedenti, la il valore predefinito è HighestPatch e non può essere modificato.

Le note di rilascio di 2.8 menzionano il cambiamento di comportamento e per il motivo che il pacchetto di installazione ora ha un risultato di risoluzione delle dipendenze coerente nel tempo.

https://docs.nuget.org/docs/release-notes/nuget-2.8

Problemi correlati