Construire une solution contenant un projet d'application Web en utilisant MSBuild de Powershell comme ceci:projet de construction d'applications Web en utilisant MSBuild de la ligne de commande sur 64 bits: cibles fichier manquant
msbuild "/p:OutDir=$build_dir\" $solution_file
fonctionne bien pour moi sur 32 bits , mais sur une machine 64 bits, je suis en cours d'exécution dans cette erreur:
error MSB4019: The imported project "C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.
J'utilise Visual studio 2008 et v2 Powershell. Le problème a déjà été documenté here et here. Fondamentalement sur l'installation 64 bits de VS, les Microsoft.WebApplication.targets requis par MSBuild se trouvent dans le répertoire Program Files (x86), pas dans le répertoire Program Files, mais MSBuild ne le reconnaît pas et semble au mauvais endroit.
Les deux solutions que j'ai à ce jour ne sont pas idéales:
- Copiez manuellement le fichier sur 64 bits de Program Files (x86) Program Files. C'est une solution médiocre - chaque dev devra le faire manuellement.
- Modifiez manuellement le fichier csproj afin que MSBuild soit au bon endroit. Encore une fois pas idéal: je préférerais ne pas avoir tout le monde sur 64 bits pour éditer manuellement les fichiers csproj sur chaque nouveau projet.
par exemple.
<Import Project="$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)" Condition="Exists('$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)')" />
Idéalement je veux une façon de dire MSBuild pour importer le fichier cible forment le bon endroit de la ligne de commande, mais I can't work out how to do that. Des solutions?
Grande solution! Vous m'avez pensé, et en appelant la version 32 bits de MSBuild qui se trouve dans le dossier C: \ Windows \ Microsoft.NET \ Framework (le MSBuild 64 bits est dans le dossier Framework64) fonctionne également. Merci! –
Oui, j'aurais probablement dû mentionner que j'ai un shell 32 bits configuré pour utiliser vcvarsall.bat (qui utilise par défaut x86). Mon shell 64 bits transmet en amd64 ce même fichier batch pour configurer mon environnement. Qui BTW, ne fonctionnerait pas, sauf que j'utilise une fonction PSCX appelée Invoke-BatchFile qui rend les changements de variable d'environnement fait par vcvarsall.bat permanent à l'interpréteur de commandes. –
BTW, voici comment je configure mes différents shells bitness: $ vcargs =?: {$ Pscx: Is64BitProcess} {'amd64'} {'x86'}; $ VS90VCVarsBatchFile = "$ {env: VS90COMNTOOLS} .. \ .. \ VC \ vcvarsall.bat"; Invoke-BatchFile $ VS90VCVarsBatchFile $ vcargs. Invoke-BatchFile comme je l'ai mentionné précédemment fait partie de http://pscx.codeplex.com. –