2015-08-19 31 views
8

Si utilizza VSO con un controller di build in locale (TFS 2013). Ho abilitato il ripristino del pacchetto NuGet nel menu Opzioni di Visual Studio (migrato dal vecchio modo deprecato con la cartella .nuget).TFS 2013 Build Controller non rispettato NuGet Package Restore

All'interno di VS, i pacchetti di ripristino funzionano correttamente, tuttavia il controller di generazione non ripristina i pacchetti NuGet. Il controller di build viene eseguito con un account di servizio e se avvio VS (sul server di build) come account di servizio e compilo il mio codice, esso ripristina i pacchetti. Come posso ottenere il controller di build per ripristinare i pacchetti mancanti?

Nella mia cartella BuildProcessTemplate di TFS, ho Non avere un TfvcTemplate.12.xaml, ho solo DefaultTemplate.11.1.xaml e come non ho mai modificato il file XAML, vedo che ci sia un elemento di Toolbox per NuGetRestore

I Non sono sicuro su come procedere, mi sto chiedendo perché non ho il modello TfvcTemplate.12.xaml, ma visto che non lo faccio, come posso ottenere il mio build server/controller per ripristinare i pacchetti NuGet?

Ho modificato il file NuGet.config per l'account di servizio (che risiede nella cartella AppData) e il file NuGet.config che risiede nella cartella .nuget nella root della mia soluzione, tuttavia le mie build sempre fallire a causa di dipendenze mancanti (pacchetti NuGet).

C'è un modo per risolvere questo problema? Inoltre, come posso ottenere un modello di build TfvcTemplate.12.xaml?

risposta

8

Per abilitare il ripristino del pacchetto NuGet con la generazione TFS, seguire i passaggi seguenti. Controlla questo blog per i dettagli.

  1. In VS IDE, andare su Strumenti -> Opzioni -> NuGet Package Manager -> abilitare Consenti NuGet per scaricare i pacchetti mancanti.
  2. Elimina file NuGet.exe e NuGet.targets dalla cartella .nuget. Sia questi due file vengono eliminati anche dal controllo di versione.
  3. Rimuovere i seguenti tag da .proj di file:

1. <RestorePackages>true</RestorePackages> 
 

 
    2.<Import Project="$(SolutionDir)\.nuget\nuget.targets" /> 
 

 
    3. <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild"> 
 
     <PropertyGroup> 
 
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, 
 
    see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText> 
 
     </PropertyGroup> 
 
     <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" /> 
 
    </Target>

Per un altro problema di non riesce a trovare il modello di processo TfvcTemplate.12.xaml, è possibile prima creare un nuovo progetto di squadra in VSO, scaricare il file di processo e controllarlo in Controllo versione. Quindi modificare la definizione di build, fare clic sul pulsante Nuovo nella scheda Processo, cercare il file di processo nel controllo di versione.

+0

ho letto un post simile che mi ha camminato attraverso la rimozione delle .targets Nuget e file .exe e modificando i file proj, tuttavia non ha fatto menzione di rimuovere il true. Da quel momento l'ho fatto e ho fatto un'altra build che non è andata a buon fine - lo stesso problema che ho affermato in origine - nessun pacchetto NuGet sta ripristinando. – djm61

+0

I modelli di costruzione non vengono più aggiunti al controllo del codice sorgente. Se premi Dow per la selezione del modello nel menu di modifica dell'editor di Visual Studio, puoi selezionare i nuovi modelli. –

+0

Grazie a @MrHinsh, ho trovato dove modificare il menu a discesa e sembra aver risolto il problema. [Questo] (https://github.com/owen2/AutomaticPackageRestoreMigrationScript) ha anche aiutato. – djm61

1

Per tutti coloro che inciampano qui con il problema che avevo (alcuni ma non tutti i pacchetti sono stati ripristinati su un server di build), l'ultimo pezzo del puzzle per me era l'aggiunta di un NuGet.config nella radice della mia soluzione, fratello al file .SLN come spiegato da David Ebbo qui: http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html.

Dal post del blog di Ebbo, il contenuto del file per me sono semplicemente

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
    </packageSources> 
</configuration> 

Purtroppo, io non capisco perché che ha cambiato le cose per me. Ma sta funzionando ora e mi sto muovendo!

UPDATE:

L'URL API NuGet è cambiato per v3 (corrente di settembre 2016). Da https://www.nuget.org/

<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />