.net - MSVS 2012 上的 LNK2022(重复的托管类型具有不同的可见性)

标签 .net visual-studio visual-c++ c++-cli

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

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

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

谢谢你的帮助?

最佳答案

我有同样的问题,并且确实有 dom_beau 的回答中描述的相同情况,所以我很确定我也有相同的根本原因。然而,为了能够解决这个错误,我必须找到实际的违规类(有一些,而且错误消息对你找到它们几乎没有帮助!)。

因此,我编写了以下 LINQ 查询,该查询查找在多个 *.obj 文件中定义的所有具有冲突可见性的类。它可能对某人有用,所以我将其发布在这里。

// Analyze text files produced by ildasm when given *.obj files.
// Use "for %1 in (*.obj) do ildasm /text %1 > %1-ildasm.txt" to produce the files.

from file in Directory.GetFiles(@"your project's intermediate folder")
where file.EndsWith("-ildasm.txt")
let lines = File.ReadAllLines(file)
from i in Enumerable.Range(0, lines.Count() - 1)
where lines[i].Contains("TypDefName:")
let type = lines[i].Substring(16,lines[i].IndexOf(" (")-17)
let flags = lines[i+1]
group new {file, flags} by type into g
where g.Select(t=>t.flags).Distinct().Count() > 1
select g

关于.net - MSVS 2012 上的 LNK2022(重复的托管类型具有不同的可见性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645105/

相关文章:

c++ - C++控制网络摄像机的云台功能

.net - 我可以拥有一个使用数字作为名称的 MVC 4 Controller 吗?

.net - 我什么时候应该使用 UdpClient.BeginReceive?什么时候应该在后台线程上使用 UdpClient.Receive?

node.js - 多设备混合应用程序中未指定 NodeJs 的路径

c++ - 我的 Visual C++ 编译器编译了过时的源

c# - 从哪里开始使用 C# 或任何语言中的神经网络进行手写文本识别

c# - 控制音量混合器

c# - 如何在鼠标按下时获取鼠标光标下的 TreeNode?

windows - 构建 DLL 时;我应该链接到什么类型的 CRT?

c++ - 在 Visual Studio 中的同一解决方案中构建 C 项目以调用 C++ 库中的函数