我正在尝试在64位计算机上使用MSBuild(v4.0)构建项目。由于某些原因,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加载。这给我带来麻烦,因为我有一个需要加载的扩展,必须在32bit/64bit进程中正确加载,并且不会加载(MSBuild试图在64bit进程中加载​​32bit版本)。

为什么?

最佳答案

我在Microsoft Connect上filed a bug,它被关闭为“按设计”,其解释如下:



我接受证据​​,但不同意结论。我认为,安装失败的作者应该拥有在64位计算机上无法使用其扩展程序的作者。

关于msbuild - 为什么64位MSBuild加载32位扩展?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3586040/

10-11 22:43
查看更多