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>
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:
VS 2013:
VS 2012:
VS 2010:
. NET 4.6:
. NET 4.5.2:
. NET 4.5.1:
. NET 4.5:
. NET 4.0.1:
. NET 4.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.
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:
Name: env.VisualStudioVersion
Value: 10.0
Notez que TeamCity n'a pas besoin d'installer VS2012.
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
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
Comme décrit ici :
MSBuild.Microsoft.VisualStudio.Web.targets
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>
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.