我试图在64位机器上使用MSBuild(v4.0)构建项目。出于某种原因,MSBuild正在尝试加载一个32位的扩展名,我无法弄清楚原因。为了证明这个问题,我将这个问题缩小到了最小的范围。为什么64位MSBuild加载32位扩展?
使用下面的MSBuild项目文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<Target Name="test">
<Message Text="bin path: $(MSBuildBinPath)" />
<Message Text="extensions path: $(MSBuildExtensionsPath)" />
<Message Text="extensions path (x86): $(MSBuildExtensionsPath32)" />
<Message Text="extensions path (x64): $(MSBuildExtensionsPath64)" />
</Target>
</Project>
我得到这样的输出:
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation 2007. All rights reserved.
Build started 8/27/2010 9:56:35 AM.
Project "D:\5\test.proj" on node 1 (default targets).
test:
bin path: C:\Windows\Microsoft.NET\Framework64\v4.0.30319
extensions path: C:\Program Files (x86)\MSBuild
extensions path (x86): C:\Program Files (x86)\MSBuild
extensions path (x64): C:\Program Files\MSBuild
Done Building Project "D:\5\test.proj" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.03
的MSBuild显然知道有关32位和64位扩展路径,从二进制路径似乎很清楚,我正在运行64位MSBuild.exe,但由于某种原因,它认为扩展应该从Program Files (x86)
而不是Program Files
加载。这给我带来了麻烦,因为我有一个需要加载的扩展,必须在32位/ 64位进程中正确加载,并且不会加载(MSBuild试图在64位进程中加载32位版本)。
为什么?