[英]Building Web Application project using MSBuild from command line on 64-bit: missing targets file
使用PowerShell中的MSBuild构建包含Web应用程序项目的解决方案,如下所示:
msbuild "/p:OutDir=$build_dir\" $solution_file
在32位上工作正常,但在64位机器上我遇到了这个错误:
错误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不能识别这个,所以看起来错误的地方。
我到目前为止的两个解决方案并不理想:
例如
<Import Project="$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)" Condition="Exists('$(MSBuildExtensionsPathx86)\$(WebAppTargetsSuffix)')" />
理想情况下,我想要一种方法告诉MSBuild从命令行从正确的位置导入目标文件,但我无法弄清楚如何做到这一点 。 有解决方案吗
您还有其他几种选择:
由于MSBuild基本上不受环境变量的影响,因此在启动msbuild之前,您可以随时将Program Files更改为ProgramFiles(x86)。
$env:ProgramFiles = ${env:ProgramFiles(x86)}
这应该诱使MSBuild在正确的位置寻找
我能想到的另一种方法是使用Start-Job从脚本中运行MSBuild。 这更像是一个通用的解决方法:
Start-Job {
Import-Module YourProject
Start-YourMsBuildProject
} -RunAs32
希望这可以帮助
如果您从32位提示符运行msbuild,这应该可以在64位计算机上进行任何修改。 鉴于此测试文件:
<Project
DefaultTargets="Test"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
ToolsVersion="3.5">
<Target Name="Test">
<Message text="$(MSBuildExtensionsPath)"/>
</Target>
</Project>
我在x64系统上从32位PowerShell提示符获得此结果:
PS> msbuild test.proj /nologo
Build started 3/26/2010 9:13:10 AM.
Project "C:\temp\test.proj" on node 0 (default targets).
C:\Program Files (x86)\MSBuild
Done Building Project "C:\temp\test.proj" (default targets).
如果直接从VS运行,这也不应该是一个问题,因为VS是一个32位应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.