0

我有一个 VS 2010 解决方案,其中包含 C++/CLI 和 C# 项目的完美组合。我决定继续使用 VS 2012 进行进一步开发。由于一些技术困难,C++/CLI 项目无法升级。这给我带来了一些问题。我每晚构建脚本,使用devenv命令编译上述解决方案。所有 C++/CLI 项目都无法编译。

IDE 在触发时会立即要求转换所有项目。我说不,然后编译,一切正常。

我的调查:

我尝试了以下方法来了解实际发生的情况。MSBUILD 日志的详细程度也有所增加。在所有情况下,都使用了 VS 2012 命令提示符。

情况1:

msbuild {C++/CLI 项目名称} /t:rebuild

结果:

该项目编译良好并使用 VS 2010 编译器。日志中的以下行显示:

创建“x64\Debug\Swift.Algorithms.unsuccessfulbuild”,因为指定了“AlwaysCreate”。ClCompile:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe

案例二:

devenv {C++/CLI 项目名称} /rebuild "{CONFIGURATION}"

结果:

该项目编译良好并使用 VS 2010 编译器。日志中的以下行显示:

1>使用程序集“Microsoft.Build.CppTasks.x64, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的“CL”任务。1> 任务“CL” 1> 传递给工具的环境变量: 1>
VS_UNICODE_OUTPUT=1512 1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe

案例3:(让我沮丧的那个)

devenv {解决方案文件名} /rebuild "{CONFIGURATION}"

C++/CLI 项目无法编译。C# 项目编译良好。本例中使用的 C++ 编译器是 VS 2012 版本。日志中的以下行显示:

1> 传递给工具的环境变量: 1> VS_UNICODE_OUTPUT=1016 1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\x86_amd64\CL.exe /c

问题:

1)我看到MSBUILD足够聪明,可以在单独使用项目文件进行编译时使用适当的工具。使用什么 VS 工具命令提示符(VS 2010 或 VS 2012)真的无关紧要。调用解决方案文件时出了什么问题?

2)我看到编译我的产品的唯一方法是单独编译每个项目,因为解决方案文件会造成问题。这是一个已知的限制吗?

我将不胜感激有关此事的任何意见。

4

1 回答 1

0

无论您是使用msbuild还是devenv(我个人更喜欢msbuild)构建,我想至少Platform Toolset每个 Visual C++ 项目的 应该设置为Visual Studio 2010.

平台工具集

于 2013-07-31T12:16:36.117 回答