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.