MSBuild in TeamCity della soluzione Visual Studio 2012

Ho un progetto web / sln VS 2012 che sto cercando di creare in TeamCity. usa .NET 4.5 che è installato su TeamCity.

Il server TeamCity ha installato solo VS 2010 .

Ottengo questo errore quando viene eseguita la generazione:

C:\BuildAgent\work\d5bc4e1b8005d077\CUSAAdmin.Web\CUSAAdmin.Web.csproj(799, 3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the  declaration is correct, and that the file exists on disk. Project CUSAAdmin.Web\CUSAAdmin.Web.csproj failed. Project CUSAAdmin.sln failed. 

Sta cercando di utilizzare Visual Studio 2012 (v11.0) per creare.

Ho impostato VisualStudioVersion per essere 10 nel build.xml anche se ??

    

Anche all’interno del progetto è di default VS2010

   10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) 

In realtà, non è necessario installare Visual Studio sul server CI. È sufficiente copiare alcune cartelle da un computer di sviluppo nella stessa posizione sul server CI.

VS 2015:

  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ Web
  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ WebApplications

VS 2013:

  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ Web
  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v12.0 \ WebApplications

VS 2012:

  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web
  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ WebApplications

VS 2010:

  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ Web
  • C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v10.0 \ WebApplications

.NET 4.6:

  • C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ .NETFramework \ v4.6

.NET 4.5.2:

  • C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ .NETFramework \ v4.5.2

.NET 4.5.1:

  • C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ .NETFramework \ v4.5.1

.NET 4.5:

  • C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ .NETFramework \ v4.5

.NET 4.0.1:

  • C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ .NETFramework \ v4.0.1

.NET 4.0:

  • C: \ Programmi (x86) \ Assiemi di riferimento \ Microsoft \ Framework \ .NETFramework \ v4.0

Oppure, come suggerito da Matt , è ansible copiarli in una sottodirectory del progetto e modificare la posizione nel file MSBuild (in genere .csproj o .vbproj ).

Una volta fatto, il tuo progetto verrà compilato. È comunque necessario impostare VisualStudioVersion in modo esplicito su quello che si sta utilizzando per assicurarsi che sia impostato correttamente.

NOTA: questa soluzione funziona per tutti i tipi di progetti (compresi i progetti Web). Per un sito web (che non ha file di progetto), ho finito con l’installazione di Windows SDK che corrisponde alla versione di .NET SDK che sto usando, perché mancavano le chiavi di registro che causavano il mancato sviluppo.

Risulta che è davvero semplice. Per fare in modo che MSBuild esegua VS2010 come builder su una soluzione creata da VS2012 in TeamCity, imposta semplicemente la variabile di ambiente per la configurazione di build in questo modo:

inserisci la descrizione dell'immagine qui

 Name: env.VisualStudioVersion Value: 10.0 

Nota TeamCity non ha bisogno di VS2012 installato.

In alternativa, è ansible copiare gli obiettivi di compilazione necessari da c: \ Programmi (x86) \ MSBuild in una sottodirectory del progetto (ad esempio. \ Build) assicurandosi di conservare la struttura e aggiungere quanto segue al proprio csproj:

   ..\Build\  

Ad esempio, se la mia radice del progetto è C: \ Dev \ MyProjSln \ MyProj

  • Crea cartella C: \ Dev \ MyProjSln \ Build \ Microsoft \ VisualStudio \ versione \ WebApplications \
  • Copia contenuto di C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ versione> \ WebApplications \ nella cartella creata
  • Aggiungi l’elemento MSBuildExtensionsPath32 al gruppo di proprietà sotto il nodo Progetto in csproj
  • Profitto!

Personalmente, preferisco questo metodo di tracciamento delle dipendenze del target di build, in quanto impedisce al server di build di dipendere da requisiti di struttura di cartelle non documentate e ottiene le dipendenze nel controllo del codice sorgente

Come descritto qui :

  • Installa nuget MSBuild.Microsoft.VisualStudio.Web.targets
  • Modifica il file .csproj

Sostituire:

   

con:

  

Ovviamente devi assicurarti che le versioni corrispondano al tuo caso sia sul nuget installato che sul percorso in

Sono assolutamente in disaccordo con la modifica dei file di progetto perché ciò potrebbe influire su altri sviluppatori. Questo è ciò che ha funzionato per me dal momento che la cartella v11.0 mancava nella cartella MS build: 1) Crea v111.

  1. Crea cartella v11.0 su C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio
  2. Copiare le cartelle Web e WebApplications dalla mia casella di sviluppo “C: \ Programmi (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0”
  3. Booom! funziona come un fascino \
  4. Nota: ho installato “Microsoft Visual Studio 2012 Shell (Isolated) Redistributable Package”

Innanzitutto, TeamCity non richiede la presenza di Visual Studio di qualsiasi versione da creare. Quando una fase di costruzione nel progetto è configurata con MSBuild runner, TeamCity deve sapere quale versione di MSBuild usare. Questa è un’impostazione di un passo di costruzione. La corretta versione di MSBuild deve essere selezionata in una configurazione del passo di costruzione in base agli strumenti .NET installati su un computer di compilazione. TeamCity utilizzerà tale valore per determinare il percorso della posizione e imposterà una variabile di ambiente quando invoca MSBuild.

Il problema con Visual Studio 2012/2013 è che è supportato solo da TeamCity a partire dalla 8.1.0. Quindi, se la tua versione di TeamCity è precedente alla 8.1. è necessario eseguire l’aggiornamento all’ultima versione 8.1.x per visualizzare un’impostazione per MSBuild Tools 2013. Una volta selezionata una versione corretta di MSBuild nelle impostazioni del passo di costruzione, il problema scomparirà. Per maggiori informazioni leggere qui: http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html