我有一个 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)我看到编译我的产品的唯一方法是单独编译每个项目,因为解决方案文件会造成问题。这是一个已知的限制吗?
我将不胜感激有关此事的任何意见。