Visual Studio _MSC_VER 与平台工具集

Posted

技术标签:

【中文标题】Visual Studio _MSC_VER 与平台工具集【英文标题】:Visual Studio _MSC_VER versus Platform Toolset 【发布时间】:2017-05-03 14:25:18 【问题描述】:

我有一个导入到 VS 2015 的 VS 2010 C++/CLI 项目。因为它链接到一些我无法控制的 VS 2010 C++ 库,所以我需要使用 VS 2010 编译器对其进行编译。当我将项目导入 VS 2015 时,我告诉 VS 不要升级项目(不记得确切的选项,但项目现在在解决方案资源管理器中显示“项目名称(Visual Studio 2010)”)。在项目属性中,Platform Toolset 被列为“Visual Studio 2010 (v100)”:

我使用的其中一个库有一个带有一些 ifdef 的标头,如果 _MSC_VER 不是受支持的版本之一 (Visual C++ 6.0-10.0),则会显示错误。该项目正在生成该错误,并且我确定在 Intellisense 中 during build 显示的 _MSC_VER 是 1900(VS 2015 的默认值)。

如何使用 2010 版 C++ 编译器 (_MSC_VER 1600) 构建项目?这不是 Platform Toolset 选项应该控制的吗?

【问题讨论】:

确保所有项目的“平台工具集”为 v100。 @tambre,谢谢。我的解决方案中只有两个 C++ 项目(其余都是 C#),并且这两个 C++ 项目的“平台工具集”都设置为 v100。 我将启动 procmon 以查看 MsBuild 如何找到并启动 cl.exe。 有趣。 VS 2010 项目文件中的某些内容可能无法被 VS15 正确解释,除非升级到更新的等效项。尝试升级解决方案,然后将平台工具集设置为 v100。 我刚刚意识到错误来自 Intellisense,而不是构建。构建实际上工作正常。这是 Visual Studio 中的一个小错误。我添加了一个答案来帮助其他遇到此问题的人。 【参考方案1】:

我误解了 Visual Studio 中发生的事情。该构建实际上运行良好;生成的错误来自 Intellisense。 Visual Studio 中有一个 known bug,其中 Intellisense 无法正确反映项目所选平台工具集指定的 _MSC_VER。万一其他人遇到这个问题,我会留下这个问题。

【讨论】:

以上是关于Visual Studio _MSC_VER 与平台工具集的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio _MSC_VER 与平台工具集

在 VS 2012 (C++) 中编译 Visual Studio 2010 项目:错误 LNK2038:检测到“_MSC_VER”不匹配:值“1600”与值“1700”不匹配

CUDA 9.1 与 Visual Studio 2017 (VS2017 15.6.4) 的不兼容问题

_MSC_VER

_MSC_VER详细介绍

CMake区分MSVC版本