LNV2022(重复管理类型具有不同的可见性)在MSVS 2012上

dom*_*eau 10 .net c++-cli visual-studio visual-c++

我正在将解决方案从MSVS2005移植到MSVS2012.这些项目使用的是C++ .NET,但也使用自制的原生C++库.我们用2005构建项目没有问题,但是现在,我无法使用2012构建项目.我收到以下错误消息:

MyFile.obj:错误LNK2022:元数据操作失败(801311E4):重复的托管类型具有不同的可见性.

这是什么意思?您需要什么信息来帮助我?

谢谢你的帮助?

dom*_*eau 8

我发现了这个bug.它是这里建议的所有内容的混合.

在项目的某个地方,包含了一个本机C++头文件.此文件中的一个类是公开的:

#include "File_Where_ClassName_Is_Defined.h"
#pragma make_public( ClassName )
Run Code Online (Sandbox Code Playgroud)

但是在我自己的代码中,我包含了第二个头文件,它本身包含定义了公共类的头文件.因此,此时,该类在一个文件中" 公开",并且在同一项目中的另一个文件中" 公开"."具有不同可见性的复制品"来自那里.

让我走错路的唯一一点是错误信息:"重复的托管类型具有不同的可见性".但在这里,它是一种非托管类型.

因此,如果您有一天遇到此错误,请在项目中查找#pragma make_public(...),然后在有问题的文件中查找重复的包含.