错误 C1190:托管目标代码需要'/clr'选项

error C1190: managed targeted code requires a '/clr' option

本文关键字:选项 clr C1190 代码 目标 错误      更新时间:2023-10-16

已经发现了很多关于这个错误的信息,但我的案例还没有得到任何匹配。

我正在调试模式下构建一个解决方案(有很多项目),其中一个项目抛出了这个错误,我使用的是VS2010,语言是C++,.net版本4.0,以前这个项目是在vs2008和VS2010中编译的,一切都很好,现在我有一台新机器,它刚刚安装了VS2010,现在面临这个错误。

需要注意的主要事项是:
属性设置:

  1. 选择项目配置->常规->/CLR
  2. 在C++中->常规->不支持CLR

我从过去就有了这些设置,它在VS2010的旧机器上运行得很好,只是在相同的调试模式下。

该怎么办?

我使用的是Visual Studio 2013。

我在一个非常简单的C程序中也有类似的症状。在项目属性中,我将通用/平台工具集设置从"Visual Studio 2010"更改为"Visual Studio 2013 v120",这为我消除了这个错误

如错误所示,预编译的头文件与/clr编译的文件不兼容。

您可以禁用使用/clr编译的cpp文件或整个项目(C/C++->Precompiled Headers->Precompiled Header:Not Using Precompiled Headers)的预编译头。我不确定有什么区别,但两者似乎都对我有效。

Doc并没有完全错,但我敢打赌这不是这里发生的事情。

你有这样的东西吗:

#using namespace boost::asio;

而不是像这样的东西?

using namespace boost::asio;

"using"answers"#using"在Visual Studio中都有有效的角色,但如果您指的是纯C++语言关键字,请确保您使用的是前者!后者确实用于托管代码。请参阅此处:

https://msdn.microsoft.com/en-us/library/yab9swk4.aspx

在Visual Studio 2015中出错会产生以下影响:

生成输出:1> thingy.cpp(3):错误C2006:"#using":应为文件名,找到的是"namespace"1> thingy.cpp(3):致命错误C1190:托管目标代码需要"/clr"选项

请注意,试图通过删除"namespace"关键字并引用该值来"满足"这一点,只会导致第二个错误。

(我认为这一点值得一提,因为随着Visual Studio和C++语言规范的不断变化,人们会尝试各种他们知道不应该工作的语法,如果它突然编译,就假设规范或工具在某种程度上发生了变化,他们没有时间跟上——尤其是如果错误消息似乎与"功能"有关他们毫不在乎,也不使用。)