2015-03-30 12 views
8

Ho TFS che esegue alcune build di integrazione continua. Oggi ha rotto per una soluzione. Sembra che non riesca a trovare AutoMapper. Tutti gli altri pacchetti possono essere trovati bene.TFS non è in grado di ripristinare il pacchetto NuGet

Un paio di punti rilevanti:

  • Nessuno dei pacchetti sono in controllo del codice sorgente, stiamo lasciando TFS ripristinarli.
  • Abbiamo un feed NuGet interno, ma non sembra essere un problema in altre soluzioni, e in questa soluzione stiamo ancora ottenendo il ripristino di Entity Framework - non solo AutoMapper.
  • Ho provato a rimuovere e riaggiungere i pacchetti NuGet. Senza fortuna.
  • Se utilizzo Desktop remoto per connettersi al server di generazione e aprire il progetto in Visual Studio, ripristina i pacchetti e li costruisce bene.
  • Posso creare manualmente eseguendo D:\"Program Files"\"Microsoft Team Foundation Server 12.0"\Tools\Nuget.exe restore seguito da msbuild MySolutoin.sln
  • Il nostro server TFS è installato sul nostro disco D: \.

Questo è dal Registri TFS:

D:\Program Files\Microsoft Team Foundation Server 12.0\Tools\nuget.exe restore "C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.sln" -NonInteractive 
Installing 'EntityFramework 6.1.3'. 
Installing 'InternalPackage 1.0'. 
Successfully installed 'InternalPackage 1.0'. 
Successfully installed 'EntityFramework 6.1.3'. 
Unable to find version '3.3.1' of package 'AutoMapper'. 
C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe /nologo /noconsolelogger "C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.sln" /nr:False /fl /flp:"logfile=C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.log;encoding=Unicode;verbosity=normal" /p:SkipInvalidConfigurations=true /m /p:OutDir="C:\Builds\1\MyCompany Web\FclQuoteWcfService\bin\\" /p:VCBuildOverride="C:\Builds\1\MyCompany Web\FclQuoteWcfService\src\FclQuoteWcfService.sln.vsprops" /dl:WorkflowCentralLogger,"D:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;BuildUri=vstfs:///Build/Build/230;IgnoreDuplicateProjects=False;InformationNodeId=12;TargetsNotLogged=GetNativeManifest,GetCopyToOutputDirectoryItems,GetTargetPath;TFSUrl=http://ctidev2k8:8080/tfs/MyCompany;"*WorkflowForwardingLogger,"D:\Program Files\Microsoft Team Foundation Server 12.0\Tools\Microsoft.TeamFoundation.Build.Server.Logger.dll";"Verbosity=Normal;" /p:BuildId="9aa9f8af-c9b9-4d0a-ba06-7cc959231d8e,vstfs:///Build/Build/230" /p:BuildLabel="FclQuoteWcfService_20150330.2" /p:BuildTimestamp="Mon, 30 Mar 2015 20:40:07 GMT" /p:BuildSourceVersion="[email protected]$/MyCompany Web" /p:BuildDefinition="FclQuoteWcfService" 
Exception Message: MSBuild error 1 has ended this build. You can find more specific information about the cause of this error in above messages. (type BuildProcessTerminateException) Exception Stack Trace: at System.Activities.Statements.Throw.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation) 
+0

Ripristino solo dal feed NuGet interno sul server di generazione? O permetti anche il ripristino da nuget.org? In caso contrario, verificare che il pacchetto sia effettivamente nel feed interno. Inoltre, quando si esegue manualmente la build, è possibile che si stia eseguendo come un altro utente con autorizzazioni di accesso diverse (e un diverso file globale nuget.config e così diversi repository di nuget). – Petrik

risposta

10

Ho visto anche questo. Sembra essere attivato non appena il ripristino del pacchetto NuGet passa al feed interno. Una volta eseguita questa operazione, non torna al feed ufficiale di nuget.org e continua a cercare i pacchetti nel feed interno.

Verificare che entrambe le origini del pacchetto siano state aggiunte al file NuGet.config. Assicurati anche che entrambe le fonti siano "attive".

<configuration> 
    <packageSources> 
     <add key="nuget.org" 
      value="https://www.nuget.org/api/v2/" /> 
     <add key="example.com" 
      value="http://example.com/feed/nuget/" /> 
    </packageSources> 
    <activePackageSource> 
     <add key="All" 
      value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 

Vedi NuGet configuration file documentazione.

0

Oltre alla risposta di Matt, vorrei sottolineare quanto segue roba ben nascosto dalla documentazione NuGet:

file di configurazione Nuget sono trattati nel seguente ordine di priorità (più vicino al NuGet cartella .exe va da vittorie), ad esempio assumendo la directory soluzione è c:\a\b\c:

  • c:\a\b\c\.nuget\nuget.config - Questo file è usato solo per soluzione livello p ackages, e non è supportato in NuGet 3.0 - 3,4
  • c:\a\b\c\nuget.config
  • c:\a\b\nuget.config
  • c:\a\nuget.config
  • c:\nuget.config
  • utente specifico file di configurazione, %AppData%\NuGet\nuget.config.
  • Oppure il file specificato dall'utente tramite l'opzione -ConfigFile.

Questo potrebbe spiegare alcuni comportamenti strani in specifici scenari di cui un ripristino fa o non prendere un feed configurato, a seconda se sei ripristino con 2.x NuGet o 3.x

Edit: e ho trovato yet another reason why packages might not be detected:

Ho il pacchetto "A" con la versione 1.1.1.0.

Prima 3.4 questo comando funziona bene:

nuget install A -version 1.1.1.0

Con NuGet 3.4 RC ottengo:

An error occurred while retrieving package metadata for 'A.1.1.1' from source 'N'. An error occurred while retrieving package metadata for 'A.1.1.1' from source 'N'. Data at the root level is invalid. Line 1, position 1.

...

Il cliente tratta 1.1, 1.1 .0, 1.01.0 e 1.1.0.0 come la stessa versione usando la regola SemVer S. versioni La ragione per cui non normalizzati erano speciali cased in passato è perché per v2 http chiama il cliente avrebbe prima inviare esattamente la stringa di versione come l'utente specificato che

1

risposta di Matt mi ha messo sulla strada giusta, ma non usiamo un feed interno, quindi ho dovuto scavare un po 'di più. Questa risposta funziona, almeno, per un progetto creato in Visual Studio 2015 e creato da TFS 2015.

In Visual Studio, aprire le impostazioni di Gestione pacchetti NuGet (menu Strumenti> NuGet Package Manager> Impostazioni gestore pacchetti). Scegli "Fonti del pacchetto" dall'elenco delle opzioni a sinistra.

Screenshot of the NuGet Packages Sources options window

Creare il file nuget.config alla radice della soluzione. Questo dovrebbe essere lo stesso percorso della cartella del tuo file di soluzione ".sln". Copiare il seguente nel file di configurazione:

<configuration> 
    <packageSources> 

    </packageSources> 
    <activePackageSource> 
     <add key="All" 
      value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 

All'interno del tag <packageSources>, creare una voce per ciascuna sorgente <add key="" value="" /> elencato nella finestra delle opzioni "le fonti di pacchetti". La chiave è il nome della sorgente, come mostrato sopra l'URL, e il valore è l'URL stesso. Includere quelli elencati in "Fonti del pacchetto disponibili" e "Fonti del pacchetto a livello di macchina". Non ho creato una voce per il filesystem locale in quanto non era usato in questa soluzione. Sulla base della schermata qui sopra, il file di configurazione completo contiene ora le seguenti:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
     <add key="nuget.org" 
      value="https://api.nuget.org/v3/index.json" /> 
     <add key="Microsoft and .NET" 
      value="https://www.nuget.org/api/v2/curated-feeds/microsoftdotnet/" /> 
    </packageSources> 
    <activePackageSource> 
     <add key="All" 
      value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 

Dopo aver commesso il file nuget.config al controllo del codice sorgente, TFS è stato in grado di scaricare tutti i pacchetti NuGet necessarie e con successo creare la soluzione.

Problemi correlati