MSBuild dans la solution TeamCity de Visual Studio 2012

J’ai un projet web / sln VS 2012 que j’essaye de construire dans TeamCity. il utilise .NET 4.5 qui est installé sur TeamCity.

Le serveur TeamCity a installé VS 2010 uniquement .

J’obtiens cette erreur lorsque la compilation s’exécute:

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. 

Il essaie d’utiliser Visual Studio 2012 (v11.0) pour générer.

J’ai mis le VisualStudioVersion à 10 dans le build.xml cependant?

    

Aussi bien dans le projet, il est par défaut à VS2010

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

En fait, vous n’avez pas besoin d’installer Visual Studio sur votre serveur CI. Il vous suffit de copier quelques dossiers d’une machine de développement vers le même emplacement sur le serveur CI.

VS 2015:

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

VS 2013:

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

VS 2012:

  • C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Web
  • C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0 \ Applications Web

VS 2010:

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

.NET 4.6:

  • C: \ Program Files (x86) \ Références Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6

.NET 4.5.2:

  • C: \ Program Files (x86) \ Références Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5.2

.NET 4.5.1:

  • C: \ Program Files (x86) \ Références Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5.1

.NET 4.5:

  • C: \ Program Files (x86) \ Références Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.5

.NET 4.0.1:

  • C: \ Program Files (x86) \ Références Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0.1

.NET 4.0:

  • C: \ Program Files (x86) \ Références Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0

Ou, comme Matt l’a suggéré , vous pouvez les copier dans un sous-répertoire de votre projet et modifier l’emplacement dans votre fichier MSBuild (généralement .csproj ou .vbproj ).

Une fois cela fait, votre projet sera compilé. Vous devez toujours définir explicitement VisualStudioVersion sur celui que vous utilisez pour vous assurer qu’il est correctement défini.

REMARQUE: Cette solution fonctionne pour tous les types de projets (y compris les projets Web). Pour un site Web (qui ne contient aucun fichier de projet), j’ai fini par installer le SDK Windows correspondant à la version du SDK .NET que j’utilise, car des clés de registre manquantes empêchaient sa génération.

Il s’avère que c’est vraiment simple. Pour que MSBuild exécute VS2010 en tant que générateur sur une solution créée par VS2012 dans TeamCity, définissez simplement la variable d’environnement de la configuration de génération comme suit:

entrer la description de l'image ici

 Name: env.VisualStudioVersion Value: 10.0 

Remarque TeamCity n’a pas besoin de VS2012.

Vous pouvez également copier les cibles de génération dont vous avez besoin depuis le répertoire c: \ Program Files (x86) \ MSBuild vers un sous-répertoire de votre projet (par exemple. \ Build) en veillant à conserver la structure et à append ce qui suit à votre csproj:

   ..\Build\  

Par exemple, si la racine de mon projet est C: \ Dev \ MyProjSln \ MyProj

  • Créer un dossier C: \ Dev \ MyProjSln \ Générer \ Microsoft \ VisualStudio \ version \ WebApplications \
  • Copier le contenu de C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ version> \ WebApplications \ dans le dossier créé
  • Ajouter l’élément MSBuildExtensionsPath32 au groupe de propriétés sous le noeud Projet dans csproj
  • Profit!

Personnellement, je préfère cette méthode de suivi des dépendances de la cible de génération, car elle empêche le serveur de compilation de dépendre d’exigences de structure de dossier non documentées, et obtient vos dépendances dans le contrôle de code source

Comme décrit ici :

  • Installez nuget MSBuild.Microsoft.VisualStudio.Web.targets
  • Modifier le fichier .csproj

Remplacer:

   

avec:

  

De toute évidence, vous devez vous assurer que les versions correspondent à votre cas à la fois sur le nuget installé et sur le chemin dans

Je ne suis pas du tout d’accord avec la modification des fichiers du projet car cela pourrait affecter d’autres développeurs. C’est ce qui a fonctionné pour moi puisque le dossier v11.0 était manquant sur le dossier MS build: 1) Create v111.

  1. Créer un dossier v11.0 sur C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio
  2. Copiez les dossiers Web et WebApplications à partir de ma boîte de développement “C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ v11.0”
  3. Booom! travailler comme un charme \
  4. Remarque: J’ai installé “Package redissortingbuable (isolé) shell de Microsoft Visual Studio 2012”

Tout d’abord, TeamCity ne nécessite la présence de Visual Studio d’aucune version à construire. Lorsqu’une étape de génération du projet est configurée avec le lanceur MSBuild, TeamCity doit connaître la version de MSBuild à utiliser. C’est un paramètre d’une étape de construction. La version MSBuild appropriée doit être sélectionnée dans une configuration d’étape de construction en fonction des outils .NET installés sur une machine de génération. TeamCity utilisera cette valeur pour déterminer le chemin d’emplacement et définira une variable d’environnement lorsqu’elle invoquera MSBuild.

Le problème avec Visual Studio 2012/2013 est qu’il est uniquement pris en charge par TeamCity à partir de 8.1.0. Donc, si votre version TeamCity est antérieure à 8.1. vous devez mettre à niveau vers la dernière version 8.1.x pour voir un paramètre pour MSBuild Tools 2013. Une fois que vous avez sélectionné une version MSBuild appropriée dans les parameters de l’étape de génération, le problème disparaîtra. Pour plus d’informations, lisez ici: http://blog.turlov.com/2014/07/upgrade-teamcity-to-enable-support-for.html