NuGet per soluzioni con più progetti


153

Supponiamo di avere una soluzione con 3 progetti:

  • Nucleo
  • UI
  • test

Alcuni dei pacchetti NuGet che utilizzo si applicheranno a tutti e 3 i progetti. Alcuni si applicheranno solo all'interfaccia utente e ai test e altri si applicheranno solo ai test (come NUnit).

Qual è il modo giusto per configurarlo usando NuGet?

  1. Dovrei usare "Aggiungi riferimento pacchetto libreria" su tutti e tre i progetti ogni volta che ho bisogno di un riferimento?
  2. Dovrei usare "Aggiungi riferimento pacchetto libreria" la prima volta che ho bisogno di un pacchetto e quindi utilizzare Aggiungi riferimento-> Sfoglia per gli usi successivi?

In entrambi i casi, il numero di packages.config file dovrei avere?

Risposte:


239

Per chiunque si imbatta in questo, ora c'è la seguente opzione:

Fare clic con il tasto destro del mouse sulla soluzione> Gestisci pacchetti NuGet per soluzione ...

... O:

Strumenti> Gestore pacchetti libreria> Gestisci pacchetti NuGet per soluzione ...

E se vai nell'area Pacchetti installati puoi 'Gestire' un singolo pacchetto attraverso ogni progetto nella soluzione.


5
Cosa succede se desidero installare il pacchetto per Solution con una versione specifica. La procedura guidata non mi offre questa opzione. In console posso eseguirlo in questo modo Install-Package RazorEngine -Version 3.3.0ma verrà applicato solo per il progetto che è selezionato nel menu a discesa della console.
MaciejLisCK

E 'questo supportato in Visual Studio 2010. Ho solo fatto una domanda qui - stackoverflow.com/questions/33163987/...
user2645830

Se hai un progetto veramente grande, ti fideresti davvero di un gestore di pacchetti per aggiornare le dipendenze?
Mick,

Hai idea di quando non ci sono pulsanti "Gestisci" per un pacchetto specifico? Come System.ServiceModel, non riesco a gestire questa libreria dalla vista della soluzione.
Hoàng Long,

@Mick, controlla la scheda Consolida nella finestra di dialogo menzionata ... Vorrei!

76

Utilizzare la console per indirizzare più progetti

Tools > Library Package Manager > Package Manager Console

quindi utilizzare questo comando

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME

per esempio

Get-Project Core,UI | Install-Package FluentDateTime

4
+1: almeno con l'attuale versione di NuGet, preferisco ancora questo metodo rispetto alla finestra di dialogo "Gestisci pacchetti NuGet per soluzione", perché la nostra soluzione è davvero ampia e non riesco a incollare un elenco di nomi di progetti in quella finestra di dialogo.
Yodan Tauber,

21

Questo dolce affare funziona per me:

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"}
    | ForEach-Object {Install-Package MvvmLight -project $_.Name}

2
Ecco come si fa! Ad esempio, se vuoi elencare tutte le versioni di json.net per tutti i tuoi progetti in una soluzione, prova questo:Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -Filter Newtonsoft.Json}
jonypony3

1
@EdwardMMeshur è un ottimo comando ma non otterrà la corrispondenza esatta per il nome del pacchetto. Ecco un aggiornamento leggermente aggiornato per la corrispondenza esattaGet-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }
Dark_Knight,

12

Se vuoi installare un pacchetto su più soluzioni ho scritto un utile script Powershell per farlo, vedi qui .

È anche possibile filtrare il Get-Project -Allcomando e scegliere come target un sottoinsieme dell'elenco progetti.


8

È necessario utilizzare "Aggiungi riferimento pacchetto libreria" per tutta la libreria esterna su ogni progetto nella soluzione. Finirai con un package.config per progetto.

Tuttavia, il pacchetto verrà scaricato solo una volta e riutilizzato localmente per tutti gli altri progetti.


4
Nota: se non si aggiornano tutti i pacchetti della libreria, si otterranno 3 diverse versioni dello stesso assieme. .NET può funzionare con 3 versioni diverse se si trovano nel GAC o con nomi diversi. Ma perché avranno lo stesso nome. Ti ritroverai con build non funzionanti perché la vecchia versione è stata copiata sulla versione più recente.
Graffic

2

Nella console di Package Manager puoi scrivere il seguente comando :

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION

È possibile utilizzare quel comando anche per l'installazione o l'aggiornamento (Update-Package)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.