使用PowerShell从MSBuild构建包含Web应用程序项目的解决方案,如下所示:
msbuild "/p:OutDir=$build_dir\" $solution_file
在32位机器上可以正常工作,但在64位机器上运行时出现以下错误:
error MSB4019:未找到导入的项目“C:\Program Files\MSBuild\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets”。请确认声明中的路径是否正确,并且磁盘上存在该文件。
我正在使用Visual Studio 2008和powershell v2。这个问题已经在这里和这里有记录。基本上,在64位安装的VS上,MSBuild需要的Microsoft.WebApplication.targets位于Program Files(x86)目录中,而不是Program Files目录中,但MSBuild没有识别到这一点,因此会在错误的位置查找。
目前我有两个解决方案,但都不理想:
- 在64位机器上手动将该文件从Program Files(x86)复制到Program Files。这是一个不好的解决方案-每个开发人员都必须手动执行此操作。
- 手动编辑csproj文件,以便MSBuild查找正确的位置。同样不理想:我不想让每个64位开发人员在每个新项目中手动编辑csproj文件。
例如:
<Import Project="$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)" Condition="Exists('$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)')" />
理想情况下,我希望能够通过命令行告诉MSBuild从正确的位置导入目标文件,但是我不知道如何做到这一点。有没有解决方案?
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat
来设置环境变量。 - Joseph Yaduvanshi