1

我正在尝试设置一个新的 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:平台=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 中)。为什么会是默认值?

4

1 回答 1

0

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

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

这不是完整的答案,但它足以让我克服我的问题。

于 2012-08-29T15:28:13.043 回答