【问题标题】:how does msbuild decide which tools to use?msbuild 如何决定使用哪些工具?
【发布时间】:2012-08-21 15:43:05
【问题描述】:

我正在尝试设置新的 TeamCity 代理。

我的新代理正在致电: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe

当现有代理正在调用时: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\AMD64\CL.exe

就我而言,现有代理正在做正确的事情,因为它们都是 64 位主机并构建 64 位二进制文​​件。两者都使用相同的参数调用 msbuild(删除了细节以保护无辜者): C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe (xxxx.sln /clp:PerformanceSummary /p:Configuration=Release /p:Platform=x64)

我找到了这个博客:http://blogs.msdn.com/b/aaronhallberg/archive/2007/07/16/msbuild-property-evaluation.aspx,它解释了 msbuild 如何评估属性。但我不知道使用哪些属性来决定这些工具。

您可能想知道我为什么关心工具选择。在任何一种情况下,CL 调用都会成功(您可以在 64 位窗口下运行 32 位编译)。但是在新代理上,我在预编译头文件上出现错误“预编译头文件来自以前版本的编译器,或者预编译头文件是 C++,而您正在从 C 中使用它(反之亦然)” - 并且预编译的头文件正在被同一个 AMD64\CL.exe 使用。

因此,如果有人知道 msbuild 实际使用了哪些道具,它将帮助我弄清楚这一点。

附带说明一下,我在我的工作站上的 VC++ 目录、可执行目录下的 Visual Studio 项目属性页中看到了交叉编译器 (x86_amd64\CL.exe)。这是Win 7,64位。它说它是继承的,我还没有自定义 msbuild 道具(在 C:\Users\bdelavega\AppData\Local\Microsoft\MSBuild\v4.0 中)。为什么会是默认设置?

【问题讨论】:

    标签: msbuild-4.0


    【解决方案1】:

    这篇文章解释了 msbuild 在从 VS 2010 调用时默认使用交叉编译器,并且有一个命令行开关可以覆盖它。

    http://social.msdn.microsoft.com/Forums/en-US/vcprerelease/thread/d6b352ea-12b6-4867-b86d-a052fbab1da4

    这不是完整的答案,但它足以解决我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多