2015-03-20 15 views
5

Sto cercando di capire se esiste un modo per fare affidamento su Nuget Automatic Package Restore quando si fa riferimento alle librerie ospitate su Github. Il problema è che quando aggiungo determinate librerie come submodule, ha la sua cartella/packages /. Ma quando aggiungo csproj da quella libreria alla mia soluzione dato che non ci sono DLL nella directory/packages/di quel sottomodulo, build fallisce.NuGet Ripristino automatico dei pacchetti quando si utilizzano i sottomoduli git

Ovviamente, la soluzione facile sulla mia macchina è quella di aprire il file .sln dal sottomodulo a cui ho fatto riferimento, fare una compilazione. Ora, costruire dalla mia soluzione principale funzionerà ovviamente poiché/packages/folder nel sottomodulo è popolato. Ma questo non è qualcosa che posso fare sul server di build.

Un modo per risolvere questo problema senza compromettere completamente il sottomodulo? Ovviamente anche io non voglio cambiare il sottomodulo .csproj perché questo lo metterebbe fuori sincrono con l'origine. Idealmente mi piacerebbe se potessi istruire nuget a caricare i pacchetti per il sottomodello di riferimento .csproj nella propria cartella/packages /.

+0

Possibile duplicato di [Ripristino pacchetto Nuget con sottomodulo git] (http://stackoverflow.com/questions/18609333/nuget-package-restore-with-git-submodule) – georgiosd

risposta

1

Esistono due tipi di ripristino automatico del pacchetto. Uno che viene attivato quando si genera una soluzione in Visual Studio e uno basato su MSBuild e richiede la modifica del progetto per eseguire il ripristino NuGet.exe come parte della generazione. Il ripristino basato su MSBuild è abilitato selezionando Abilita ripristino pacchetto NuGet, ma questo è stato dichiarato obsoleto dal team di NuGet.

Per un build server che si avrebbe bisogno di fare uno:

  1. Run NuGet.exe restore per tutte le soluzioni prima di eseguire la compilazione.
  2. I pacchetti NuGet vengono ripristinati da MSBuild mentre la soluzione principale viene creata.

per ripristinare i pacchetti Nuget con MSBuild è possibile utilizzare il ripristino del pacchetto di NuGet basato MSBuild deprecato o forse meglio è quello di creare un file Before.YourSolution.sln.targets come descritto nel post Ultimate Cross Platform NuGet Restore. Il file personalizzato Before .... target dovrebbe ripristinare i pacchetti per il sottomodulo.

Se si utilizza un ripristino basato su MSBuild, uno dei vantaggi è che non è necessario eseguire alcuna fase di pre-build prima della creazione della soluzione da quando la soluzione viene ripristinata. Uno dei problemi del ripristino del pacchetto basato su MSBuild, almeno con quello abilitato quando si seleziona Abilita ripristino pacchetto NuGet in Visual Studio, è che può causare problemi con i pacchetti NuGet che utilizzano i propri file .targets MSBuild personalizzati.

Problemi correlati