我有一个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
案例2:
devenv {C ++ / CLI项目名称} / rebuild“{CONFIGURATION}”
结果:
项目编译正常并使用VS 2010编译器。日志中的以下行显示:
1>使用程序集“Microsoft.Build.CppTasks.x64”中的“CL”任务, Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“。 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 {解决方案文件名} /重建“{CONFIGURATION}”
C ++ / CLI项目无法编译。 C#项目编译正常。在这种情况下使用的C ++编译器是VS 2012版本。日志中的以下行显示:
1>传递给工具的环境变量:1> VS_UNICODE_OUTPUT = 1016 1 GT; C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ BIN \ x86_amd64 \ CL.exe / c
问题:
1)我发现当项目文件被单独用于编译时,MSBUILD足够聪明,可以使用适当的工具。使用VS工具命令提示符(VS 2010或VS 2012)并不重要。调用解决方案文件时出了什么问题?
2)我看到编译我的产品的唯一方法是单独编译每个项目,因为解决方案文件导致了问题。这是一个已知的限制吗?
我很感激有关此事的任何意见。
答案 0 :(得分:0)
无论您使用msbuild
还是devenv
进行构建(我个人更喜欢msbuild
),我会想到,至少每个视觉的Platform Toolset
C ++项目应设置为Visual Studio 2010
。