web-dev-qa-db-fra.com

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 VS 2010 installé uniquement.

J'obtiens cette erreur lorsque la build 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 <Import> 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 créer.

J'ai défini le VisualStudioVersion à 1 dans le build.xml si ??

 <Target Name="BuildPackage">
   <MSBuild Projects="CUSAAdmin.sln" ContinueOnError="false" 
     Targets="Rebuild" 
      Properties="Configuration=$(Configuration); VisualStudioVersion=10.0"  />

Aussi bien à l'intérieur du projet qu'il est par défaut VS2010

  <PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath 
    Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
71
BahaiResearch.com

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\WebApplications

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)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6

. NET 4.5.2:

  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2

. NET 4.5.1:

  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1

. NET 4.5:

  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5

. NET 4.0.1:

  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0.1

. NET 4.0:

  • C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0

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

Une fois que vous avez fait cela, votre projet sera compilé. Vous devez toujours définir explicitement VisualStudioVersion sur celui que vous utilisez, juste pour être sûr 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 n'a pas de fichier de projet), j'ai fini par installer Windows SDK correspondant à la version du SDK .NET que j'utilise, car il manquait des clés de registre qui l'empêchaient de se construire.

91
NightOwl888

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

enter image description here

Name: env.VisualStudioVersion 
Value: 10.0

Notez que TeamCity n'a pas besoin d'installer VS2012.

52
BahaiResearch.com

Vous pouvez également copier les cibles de génération dont vous avez besoin à partir du fichier c:\Program Files (x86)\MSBuild dans un sous-répertoire de votre projet (par exemple.\Build) en veillant à conserver la structure et à ajouter les éléments suivants à votre csproj:

<!-- redirect msbuild path so targets can be added to source control -->
<PropertyGroup>
  <MSBuildExtensionsPath32>..\Build\</MSBuildExtensionsPath32>
</PropertyGroup>

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

  • Créez le dossier C:\Dev\MyProjSln\Build\Microsoft\VisualStudio\version\WebApplications \
  • Copiez 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 nœud de projet dans csproj
  • Profit!

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

7
Matt

Comme décrit ici :

  • Installer nuget MSBuild.Microsoft.VisualStudio.Web.targets
  • Modifiez le fichier .csproj

Remplacer:

<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" /> 
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

avec:

<Import Project="..\packages\MSBuild.Microsoft.VisualStudio.Web.targets.11.0.2.1\tools\VSToolsPath\WebApplications\Microsoft.WebApplication.targets" Condition="true" />

Évidemment, vous devez vous assurer que les versions correspondent à votre cas à la fois sur le nuget installé et le chemin dans <Import>

6
Thomas Eyde

Je suis totalement en désaccord avec la modification des fichiers de projet car cela pourrait affecter d'autres développeurs. C'est ce qui a fonctionné pour moi car le dossier v11.0 manquait sur le dossier de build MS: 1) Créez v111.

  1. Créez le dossier v11.0 sur C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio
  2. Copiez les dossiers Web et WebApplications 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 redistribuable Microsoft Visual Studio 2012 Shell (isolé)"
4
NoloMokgosi