Impostazione di una cartella di pacchetti nuget comune per tutte le soluzioni quando alcuni progetti sono inclusi in più soluzioni


137

Ho usato NuGet per recuperare i pacchetti da fonti di pacchetti interne ed esterne, il che è molto conveniente. Ma mi sono reso conto che i pacchetti sono memorizzati per impostazione predefinita per soluzione, il che è molto frustrante quando alcuni progetti con riferimenti NuGet sono inclusi in diverse soluzioni. Quindi i riferimenti vengono cambiati nella cartella del pacchetto di altre soluzioni che potrebbe non essere effettivamente disponibile per un altro sviluppatore o macchina per la compilazione.

Ho visto che ci sono modi per evidenziare una posizione comune del pacchetto (forse a livello di root del progetto, stiamo usando il controllo del sorgente TFS) con la versione 2.1 di NuGet, vedi le note di rilascio . Sto usando NuGet v2.7

Ma ho provato ad aggiungere file nuget.config senza vedere alcun effetto di questo. I pacchetti sono ancora memorizzati nella cartella della soluzione. C'è qualcosa che mi sono perso? Sembra che ci siano diverse strutture del nodo XML da aggiungere al file nuget.config, a seconda di chi sta rispondendo a questa domanda: Schwarzie suggerisce su un altro thread StackOverflow :

<settings>
  <repositoryPath>..\..\[relative or absolute path]</repositoryPath>
</settings>

Le note di rilascio per NuGet 2.1 (vedi link sopra) suggeriscono questo formato:

<configuration>
  <config>
    <add key="repositoryPath" value="..\..\[relative or absolute path]" />
  </config>
</configuration>

Non so quale di questi, o nessuno, o entrambi funzionerà alla fine. Ho provato entrambi a livello di soluzione. Il file nuget.config può essere posizionato a livello di root del progetto TFS o deve trovarsi nella directory della soluzione? Sembra che NuGet legga e applichi le impostazioni da questi file in un certo ordine, perché avrebbe senso aggiungerli a più livelli, dove un file nuget.config a livello di soluzione avrebbe la precedenza su uno a livello di root del progetto TFS. Questo può essere chiarito?

Devo rimuovere tutti i pacchetti installati prima che quei riferimenti funzionino? Mi piacerebbe se qualcuno potesse fornire un'istruzione passo-passo per passare dall'uso di nuget specifico della soluzione a una cartella di pacchetti comune in cui i progetti appartenenti a diverse soluzioni possono trovare i pacchetti di nuget richiesti.


3
Ho il sospetto che la breve risposta alla tua domanda (nascosta nella risposta di Vermis di seguito) sia che ti mancava la parte $anteriore del relativo percorso. Inoltre, la risposta alla tua domanda sui file NuGet.Config è qui . Si cerca prima nella .nuget, poi in tutte le directory principali, quindi il file 'globale' nel vostro AppData: poi li applica in ordine inverso (qualunque sia che significhi).
Benjol,

Questo sembra essere difficile. Esiste uno strumento chiamato Paket che potrebbe essere la soluzione a questo problema: fsprojects.github.io/Paket
Tuomas Hietanen,

Commento in ritardo. Volevo solo aggiungere che Visual Studio deve essere riavviato se è in esecuzione quando si avvia questa modifica, poiché i file nuget.config sembrano essere letti durante l'avvio di VS. Inoltre, non ho avuto problemi senza $, ma non iniziare con una barra rovesciata.
MBWise,

Risposte:


147

Ho una situazione simile con fonti di pacchetti interne ed esterne con progetti a cui si fa riferimento in più di una soluzione. Oggi ho appena funzionato con una delle nostre basi di codice e sembra funzionare con le workstation di sviluppo e il nostro server di build. Il processo seguente ha in mente questo scenario (anche se non dovrebbe essere difficile adattarsi per avere la cartella dei pacchetti comune dove altro).

  • codebase
    • Progetto A
    • Progetto B
    • Progetto C
    • soluzioni
      • Soluzione 1
      • Soluzione 2
      • Soluzione 3
      • Pacchetti (questo è quello comune condiviso da tutte le soluzioni)

Risposta aggiornata a partire da NuGet 3.5.0.1484 con Visual Studio 2015 Update 3

Questo processo è un po 'più semplice ora rispetto a quando inizialmente l'ho affrontato e ho pensato che fosse tempo di aggiornarlo. In generale, il processo è lo stesso solo con meno passaggi. Il risultato è un processo che risolve o fornisce quanto segue:

  • Tutto ciò che deve essere impegnato nel controllo del codice sorgente è visibile e tracciato nella soluzione
  • L'installazione di nuovi pacchetti o l'aggiornamento di pacchetti mediante Gestione pacchetti in Visual Studio utilizzerà il percorso di repository corretto
  • Dopo la configurazione iniziale, nessun hacking di file .csproj
  • Nessuna modifica della workstation di sviluppo (il codice è pronto per il check out)

Ci sono alcuni aspetti negativi potenziali di cui essere a conoscenza (non li ho ancora sperimentati, YMMV). Vedi la risposta e i commenti del Benol di seguito.

Aggiungi NuGet.Config

Si desidera creare un file NuGet.Config nella radice della cartella \ Solutions \. Assicurati che questo sia un file codificato UTF-8 che crei, se non sei sicuro di come farlo, usa il menu File-> Nuovo-> File di Visual Studio e quindi scegli il modello File XML. Aggiungi a NuGet.Config quanto segue:

<?xml version="1.0" encoding="utf-8"?>
<configuration>  
  <config>
    <add key="repositoryPath" value="$\..\Packages" />
  </config>
</configuration>

Per l'impostazione repositoryPath, è possibile specificare un percorso assoluto o un percorso relativo (consigliato) utilizzando il token $. Il token $ si basa su dove si trova NuGet.Config (il token $ è effettivamente relativo a un livello al di sotto della posizione di NuGet.Config). Quindi, se ho \ Solutions \ NuGet.Config e voglio \ Solutions \ Pacchetti, dovrei specificare $ \ .. \ Pacchetti come valore.

Successivamente, vorrai aggiungere una cartella della soluzione alla tua soluzione chiamata "NuGet" (fai clic con il pulsante destro del mouse sulla soluzione, Aggiungi-> Nuova cartella della soluzione). Le cartelle della soluzione sono cartelle virtuali che esistono solo nella soluzione Visual Studio e non creeranno una cartella effettiva sull'unità (e puoi fare riferimento ai file da qualsiasi luogo). Fare clic con il tasto destro del mouse sulla cartella della soluzione "NuGet", quindi Aggiungi-> Articolo esistente e selezionare \ Soluzioni \ NuGet.Config.

Il motivo per cui lo stiamo facendo è che è visibile nella soluzione e dovrebbe aiutare a verificare che sia correttamente impegnato nel controllo del codice sorgente. È possibile che si desideri eseguire questo passaggio per ogni soluzione nella base di codice che partecipa ai progetti condivisi.

Posizionando il file NuGet.Config in \ Solutions \ sopra qualsiasi file .sln, stiamo sfruttando il fatto che NuGet navigherà ricorsivamente la struttura delle cartelle verso l'alto dalla "directory di lavoro corrente" alla ricerca di un file NuGet.Config da usare. La "directory di lavoro corrente" indica un paio di cose diverse qui, una è il percorso di esecuzione di NuGet.exe e l'altra è la posizione del file .sln.

Passare alla cartella dei pacchetti

Innanzitutto, ti consiglio vivamente di esaminare ciascuna delle cartelle della soluzione ed eliminare tutte le cartelle \ Pacchetti \ esistenti (dovrai prima chiudere Visual Studio). Ciò semplifica la visualizzazione della posizione in cui NuGet posiziona la cartella \ Pacchetti \ appena configurata e garantisce che eventuali collegamenti alla cartella \ Pacchetti \ errata non vadano a buon fine e possono quindi essere corretti.

Apri la tua soluzione in Visual Studio e dai il via a Ricostruisci tutto. Ignora tutti gli errori di build che riceverai, questo è previsto a questo punto. Tuttavia, ciò dovrebbe dare il via alla funzione di ripristino del pacchetto NuGet all'inizio del processo di compilazione. Verifica che la cartella \ Soluzioni \ Pacchetti \ sia stata creata nel punto desiderato. In caso contrario, rivedere la configurazione.

Ora, per ogni progetto nella tua soluzione vorrai:

  1. Fare clic con il tasto destro del mouse sul progetto e selezionare Scarica progetto
  2. Fare clic con il tasto destro del mouse sul progetto e selezionare Modifica your-xxx.csproj
  3. Trova eventuali riferimenti a \ pacchetti \ e aggiornali nella nuova posizione.
    • La maggior parte di questi saranno riferimenti <HintPath>, ma non tutti. Ad esempio, WebGrease e Microsoft.Bcl.Build avranno impostazioni di percorso separate che dovranno essere aggiornate.
  4. Salvare il file .csproj e quindi fare clic con il tasto destro del mouse sul progetto e selezionare Ricarica progetto

Una volta che tutti i tuoi file .csproj sono stati aggiornati, dai il via a un altro Ricostruisci tutto e non dovresti più avere errori di compilazione sui riferimenti mancanti. A questo punto il gioco è fatto e ora NuGet è configurato per utilizzare una cartella di pacchetti condivisa.

A partire da NuGet 2.7.1 (2.7.40906.75) con VStudio 2012

Prima di tutto la cosa da tenere a mente è che nuget.config non controlla tutte le impostazioni del percorso nel sistema di pacchetti nuget. Ciò è stato particolarmente confuso da capire. In particolare, il problema è che msbuild e Visual Studio (chiamando msbuild) non usano il percorso in nuget.config ma piuttosto lo sovrascrivono nel file nuget.targets.

Preparazione dell'ambiente

Innanzitutto, vorrei passare attraverso la cartella della soluzione e rimuovere tutti i \ pacchetti \ cartelle esistenti. Ciò contribuirà a garantire che tutti i pacchetti vengano installati visibilmente nella cartella corretta e a rilevare eventuali riferimenti errati ai percorsi in tutte le soluzioni. Quindi, mi assicurerei di avere installato l'estensione nuget di Visual Studio più recente. Vorrei anche assicurarmi di avere l'ultimo nuget.exe installato in ogni soluzione. Aprire un prompt dei comandi e accedere a ciascuna cartella $ (SolutionDir) \ .nuget \ ed eseguire il comando seguente:

nuget update -self

Impostazione del percorso della cartella del pacchetto comune per NuGet

Aprire ogni $ (SolutionDir) \ .nuget \ NuGet.Config e aggiungere quanto segue nella sezione <configurazione>:

<config>
    <add key="repositorypath" value="$\..\..\..\Packages" />
</config>

Nota: è possibile utilizzare un percorso assoluto o un percorso relativo. Tenere presente che se si utilizza un percorso relativo con $ che è relativo a un livello inferiore alla posizione di NuGet.Config (si ritiene che si tratti di un bug).

Impostazione del percorso della cartella del pacchetto comune per MSBuild e Visual Studio

Apri ogni $ (SolutionDir) \ .nuget \ NuGet.targets e modifica la seguente sezione (nota che per non Windows c'è un'altra sezione sotto di essa):

<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
    <!-- Windows specific commands -->
    <NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
    <PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
    <PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>

Aggiorna pacchetti Direttamente

<PackagesDir>$([System.IO.Path]::GetFullPath("$(SolutionDir)\..\Packages"))</PackagesDir>

Nota: GetFullPath risolverà il nostro percorso relativo in un percorso assoluto.

Ripristino di tutti i pacchetti nuget nella cartella comune

Apri un prompt dei comandi e vai a $ (SolutionDir) \ .nuget ed esegui il comando seguente:

nuget restore ..\YourSolution.sln

A questo punto, dovresti avere una singola cartella \ pacchetti \ nella tua posizione comune e nessuna all'interno delle cartelle della tua soluzione. In caso contrario, verifica i tuoi percorsi.

Correzione dei riferimenti al progetto

Apri tutti i file .csproj in un editor di testo e trova tutti i riferimenti a \ pacchetti e aggiornali nel percorso corretto. La maggior parte di questi saranno riferimenti <HintPath>, ma non tutti. Ad esempio, WebGrease e Microsoft.Bcl.Build avranno impostazioni di percorso separate che dovranno essere aggiornate.

Crea la tua soluzione

Apri la tua soluzione in Visual Studio e dai il via a una build. Se si lamenta di pacchetti mancanti che devono essere ripristinati, non dare per scontato che il pacchetto sia mancante e debba essere ripristinato (l'errore può essere fuorviante). Potrebbe essere un brutto percorso in uno dei tuoi file .csproj. Verificare prima di ripristinare il pacchetto.

Hai un errore di build relativo ai pacchetti mancanti?

Se hai già verificato che i percorsi nei tuoi file .csproj sono corretti, allora hai due opzioni da provare. Se questo è il risultato dell'aggiornamento del codice dal controllo del codice sorgente, puoi provare a estrarre una copia pulita e quindi a crearlo. Questo ha funzionato per uno dei nostri sviluppatori e penso che ci fosse un artefatto nel file .suo o qualcosa di simile. L'altra opzione è forzare manualmente un ripristino del pacchetto utilizzando la riga di comando nella cartella .nuget della soluzione in questione:

nuget restore ..\YourSolution.sln

Grazie per la lunga risposta al mio lungo problema. Proverò questa soluzione e ti ricontatterò.
Mats Isaksson,

Funzionerebbe avere entrambi .sln nella stessa directory? finirebbero per condividere la stessa directory dei pacchetti?
Tofutim

7
Penso che questa risposta dimostri quanto sia rigido il nuget. Dover creare una struttura così complessa e rigida per consentire un concetto così semplice: - "condividere gli stessi assiemi tra soluzioni" è indicativo del cattivo design dell'intera cosa.
Mick,

1
Che cosa funziona anche per correggere gli HintPath - dopo aver aggiornato NuGet.config a proprio piacimento, nella console di Package-Manager eseguire "Update-Package -reinstall". Ciò reinstallerà tutti i pacchetti, correggendo anche i loro suggerimenti. Dopo questo - potresti avere alcuni relitti rimasti (in alcuni progetti di Silverlight - le "vecchie" importazioni di target / build erano ancora lì)
johannes.colmsee,

1
@Vermis Se installo la cartella dei pacchetti nuget comuni per tutte le mie soluzioni. quale sarà l'impatto di ciò sulla mia build di Azure Devops?
Pankaj Devrani,

39

Invece di impostare la posizione comune del pacchetto per tutti i progetti, è anche possibile modificare HintPath nel progetto come segue:

<HintPath>$(SolutionDir)\packages\EntityFramework.6.1.0\lib\net40\EntityFramework.dll</HintPath>

Nella maggior parte dei casi nel progetto condiviso ci saranno solo pochi pacchetti, quindi puoi cambiarlo facilmente.

Penso che sia una soluzione migliore, quando si ramifica il codice, quando si imposta un repository comune, è necessario modificare il percorso relativo, in questa soluzione non è necessario farlo.


2
Adam ha ragione. Questa è la soluzione più semplicistica a un incredibile stupido problema.
lapsus,

1
È una soluzione geniale. semplice e chiaro che non richiede la ricostruzione della struttura del codice.
RredCat,

2
AFAIK $ (SolutionDir) viene impostato solo quando la compilazione viene eseguita tramite VS. Quindi nessun edificio direttamente tramite msbuild.exe, a meno che tu non stia impostando / p: SolutionDir = path
Lars Nielsen

questo potrebbe essere impostato automaticamente qui% APPDATA% \ Roaming \ NuGet \ NuGet.Config
Korayem

15
Funziona benissimo fino a quando non aggiorni il pacchetto e sovrascrivi HintPath con un nuovo percorso relativo. Diventa piuttosto noioso in una soluzione di grandi dimensioni con molti pacchetti. Dio non voglia che tu debba eseguire un Update-Package -Reinstall ...
gravidTenso

22

La mia esperienza provando questo con l'ultima versione di NuGet (2.7) e VS2012:

  • Elimina la cartella .nuget (sul disco e nella soluzione)
  • Inserire un file NuGet.Config in una cartella principale comune di tutte le soluzioni
  • Elimina eventuali cartelle di pacchetti esistenti
  • Esamina tutti i file csproj e modifica HintPaths in modo che punti alla nuova posizione
  • Profitto

Nel mio caso, volevo inserire tutti i pacchetti .packages, quindi il mio NuGet.Config sembrava sotto.

 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <config>
     <add key="repositorypath" value=".packages" />
   </config>
 </configuration>

Nota che possono accadere alcune cose "strane", ma penso che siano sopportabili:

  • Se 'aggiorni' un pacchetto da una soluzione, eliminerà prontamente la versione precedente dalla cartella dei pacchetti (non può sapere se hai un'altra soluzione che punta lì). Questo non mi disturba molto, poiché l'altra soluzione si ripristinerà solo quando richiesto.
  • Se provi ad aggiungere un pacchetto dalla soluzione del tasto destro del mouse, se il pacchetto è già presente in un'altra soluzione, vedrà che è lì e ti mostrerà il 'segno di spunta verde' invece del pulsante 'installa'. Di solito installo dal tasto destro del mouse sul progetto, quindi questo non mi disturba affatto.

Disclaimer : ho appena provato questo oggi, non ho esperienza a lungo termine per il backup!


4
Questo è il modo consigliato per farlo. Il vecchio modo di integrazione msbuild per eseguire il ripristino di nuget nella risposta accettata è una pita, e posso confermare che mettere NuGet.config insieme allo sln funziona per noi con il ripristino automatico dei pacchetti. Mettendolo in una directory principale comune non posso confermare.
9swampy,

1
Come mettere NuGet.Config nella cartella principale comune per tutte le soluzioni (in TFS) in modo che possano fare riferimento? L'unico modo che conosco è la cartella .nuget in ogni soluzione con il file nuget.config; e se "repositorypath value = .packages" crea una sottocartella sotto il .nuget come: C: \ TFS \ Comp \ Ent \ SolABC \ .nuget \ .packages - questo non risolve i progetti / soluzioni nidificati in modo pulito che dovrebbe funzionare anche su build TFS automatizzate. La risposta accettata richiede un lavoro codificato a mano, più "valore repositorypath = $ \ .. \ .. \ .. \ Pacchetti che non funziona se ci sono progetti nidificati con percorsi relativi diversi.
hB0

2
Funziona con Visual Studio 2015 e Nuget 3.4.3
Hüseyin Yağlı,

Non solo eliminerà prontamente il pacchetto precedente, ma sovrascriverà e spezzerà HintPath che hai codificato a mano nel file csproj. @ hB0 è corretto. Funziona solo con soluzioni relativamente semplici. Una volta entrati in una complessa struttura dello spazio di lavoro TFS con filiali, progetti condivisi ecc., Non riesce a scalare in modo efficiente.
gravid

20

Ho NuGet versione 2.8.50926 con VS 2013. Non è necessario utilizzare più file nuget.config o utilizzare strutture di directory complesse. Basta modificare il file predefinito che si trova qui:

%APPDATA%\Roaming\NuGet\NuGet.Config

Ecco il contenuto del mio file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Projects\nugetpackages" />
  </config>
  <activePackageSource>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </activePackageSource>
</configuration>

Quindi tutti i pacchetti vanno nella cartella "C: \ Projects \ nugetpackages", indipendentemente dalla soluzione.

In tutte le soluzioni, è sufficiente eliminare le cartelle "pacchetti" esistenti. Quindi crea la tua soluzione e NuGet ripristinerà automaticamente i pacchetti mancanti nella nuova directory centralizzata specificata.


Questa è di gran lunga la soluzione più semplice di tutte e merita più amore!
Korayem,

2
questa è oggi la soluzione più semplice, ma manca una cosa nella tua risposta. devi ancora avere a che fare con HintPath nei file csproj di ciascun progetto. Non verranno automaticamente indirizzati a un nuovo percorso. ho ragione?
Batmaci,

In effetti, in alcuni dei miei vecchi progetti a volte ci sono riferimenti alla cartella "vecchia" dei pacchetti. Tuttavia per me tutto funziona correttamente, quindi immagino che l'impostazione globale abbia la precedenza.
Matthieu,

per OSX, consultare docs.microsoft.com/en-us/nuget/consume-packages/… . Mi piace anche l'idea di mklink qui sotto.
sgtz,


3

Da Visual Studio 2013 Update 4 e versione di Nugget Package Manager> 2.8.5 ...

Crea il file nuget.config nella radice del repository.

contenuto del file:

<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
</configuration>

Ciò causerà che tutti i pacchetti andranno nella cartella dei pacchetti a livello del file nuget.config.

Ora puoi scegliere ciascuna console nuget .sln con il comando 'update-package -reinstall'

Se hai più repository simili allo stesso livello e cosa condividere la stessa cartella del pacchetto attraverso di essi, prova a utilizzare una modalità per andare su una cartella.

 <add key="repositoryPath" value="..\packages" />

Ma in questo modo si causa che i pacchetti nuget di riferimento csproj punta una cartella verso l'alto fuori dal percorso del repository.


3

Ho inventato un pacchetto NuGet che converte in modo trasparente tutti i riferimenti NuGet in un progetto in un formato relativo a $ (SolutionDir). Lo fa usando la trasformazione XSLT in tempo reale, quindi non è necessario hackerare manualmente il file di progetto. Puoi aggiornare i tuoi pacchetti liberamente, non si romperà nulla.

https://www.nuget.org/packages/NugetRelativeRefs

Oppure, se usi Visual Studio 2015 Update 3, puoi semplicemente migrare i riferimenti del pacchetto nel project.jsonmodulo come descritto qui: https://oren.codes/2016/02/08/project-json-all-the-things


Sfortunatamente, sembra che Microsoft si stia allontanando da project.json . Inoltre, mi piace il tuo pacchetto nuget. Qualche tempo fa ho usato NuGetReferenceHintPathRewrite che fa praticamente la stessa cosa ma in modo diverso
Andrey Borisko,

2

Aggiornamento della mia esperienza con nuget 2.8.3. Era relativamente semplice. Tutto è stato abilitato il ripristino del pacchetto dalla soluzione del tasto destro. Modificato NuGet.Config e aggiunto queste righe:

  <config>
    <add key="repositorypath" value="..\Core\Packages" />
  </config>

Quindi ricostruita la soluzione, ha scaricato tutti i pacchetti nella mia cartella desiderata e aggiornato automaticamente i riferimenti. Ho fatto lo stesso per tutti i miei altri progetti, in cui sono stati scaricati solo pacchetti incrementali e riferimenti a pacchetti esistenti. Da qui un repository di pacchetti comune per tutti i progetti come impostato.

Ecco una procedura dettagliata per abilitare il ripristino del pacchetto.

http://blogs.4ward.it/enable-nuget-package-restore-in-visual-studio-and-tfs-2012-rc-to-building-windows-8-metro-apps/


2

Basta hardlink / pacchetti nella posizione condivisa desiderata. Quindi il tuo progetto non verrà interrotto per altri utenti, che non dispongono di una posizione di pacchetti speciali.

Aprire un prompt dei comandi come amministratore e utilizzare

mklink /prefix link_path Target_file/folder_path

2

Per qualsiasi soluzione significativa, le risposte di cui sopra non saranno sufficienti. Molto semplicemente, una complessa struttura dello spazio di lavoro TFS con percorsi relativi diversi, diramazioni, progetti condivisi ecc. Rende impossibile un singolo repository centrale.

Usare ($ SolutionDir) è un passo nella giusta direzione, ma codificare a mano il file csproj con ($ SolutionDir) diventerebbe piuttosto noioso in una base di codice con centinaia di pacchetti che vengono aggiornati regolarmente (ogni volta che si verifica un aggiornamento, HintPath viene sovrascritto con un nuovo percorso relativo). Cosa succede se devi eseguire Update-Package -Reinstall.

Esiste un'ottima soluzione chiamata NugetReferenceHintPathRewrite . Automatizza l'iniezione di ($ SolutionDir) negli HintPaths appena prima della compilazione (senza effettivamente modificare il file csproj). Immagino che possa essere facilmente incorporato nei sistemi di compilazione automatizzati


1

Un breve riassunto per chi è in VS 2013 professionale con NuGet Versione: 2.8.60318.667

Ecco come indirizzare i pacchetti verso un percorso relativo alla cartella .nuget:

<configuration>
  <config>
    <add key="repositoryPath" value="../Dependencies" />
  </config>
</configuration>

Ad esempio, se la soluzione (file .sln) risiede in C: \ Projects \ MySolution, quando si abilita il ripristino del pacchetto NuGet, la cartella .nuget viene creata in questo modo: C: \ Projects \ MySolution.nuget e i pacchetti verranno scaricati in una directory come questa: C: \ Projects \ MySolution \ Dependencies

NOTA: per qualche motivo (sconosciuto), ogni volta che aggiorno "repositoryPath", devo chiudere e riaprire la soluzione affinché le modifiche abbiano effetto


Si noti che manca una barra sul tag di configurazione di chiusura.
Moo,


0

per coloro che usano paket come gestore dei pacchetti, esiste un'opzione di auto-symlink per il file delle dipendenze:

storage: symlink

btw: paket fa leva su nuget

riferimento: https://fsprojects.github.io/Paket/dependencies-file.html

Se vuoi modificare il meno possibile, puoi semplicemente ripulire periodicamente le sottodirectory con uno script. vale a dire. Il comportamento predefinito di Nuget è copiare i file da una posizione globale in una cartella di pacchetti locali, quindi eliminare questi file in seguito.


0

Uso solo le giunzioni NTFS per rendere tutte le cartelle dei pacchetti dirette a una singola cartella sopra le radici del repository. Funziona alla grande. Nessun problema con il ripristino di pacchetti paralleli su più soluzioni. Un vantaggio è che non è necessario riconfigurare nulla nel codice sorgente, ad esempio le centinaia di percorsi di suggerimento relativi nei file .csproj. Funziona semplicemente lasciando che il file system gestisca il reindirizzamento e la simulazione di una singola cartella di pacchetti.

Fai attenzione ai problemi "git". Sebbene 'git status' dalla riga di comando non mostri modifiche non messe in scena, ho notato che GitKraken vede la giunzione 'pacchetto' come un file non messo in scena . Mostra anche errori come "file is a directory" quando fai clic su di esso. GitKraken proverà anche a riporre questo 'file' se si ribatte, distruggendo la giunzione e ripristinandolo come un file reale che contiene testo con il percorso del file originale. Comportamento molto strano. Forse sarai in grado di aggirare il problema assicurandoti che il file dei pacchetti venga aggiunto al tuo .gitignore.


-1

Queste sono le istruzioni di NuGet 2.1: http://docs.nuget.org/docs/release-notes/nuget-2.1

Non è necessario modificare i file a livello di soluzione.

Funziona con Visual Studio 2013 e tre soluzioni che condividono progetti.

Non dimenticare di aggiornare NuGet a livello di soluzione (ogni nuget.exe nelle cartelle .nuget).

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.