从装配中键入'<Module>'...包含比当前实现允许的更多的方法

Type '<Module>' from assembly ... contains more methods than the current implementation allows

本文关键字:实现 方法 Module gt lt 包含比      更新时间:2023-10-16

我正试图使用/clr标志在visual-studio-2013中编译一个相对较大的遗留c++项目。该项目生成一个dll。

我得到以下运行时异常:

Type '<Module>' from assembly ... contains more methods than the current implementation allows

我必须补充一点,这种情况只发生在调试配置中(Release-works)。此外,该项目大量使用模板和宏,这(我想)有助于生成大量的方法。。。

关于这个问题的文件很少甚至没有。我从网上搜索到的(不知道是否准确)是:

clr dll中的方法限制为~65K个。所有本机类的所有方法都进入一些特殊的<Module>,因此它构成了一个全局限制。

一个建议是拆分项目,但由于类间的依赖性,这并不是很简单。我想这是可行的。。。

如有任何帮助,我们将不胜感激。

我最终将代码分成了两个dll,并删除了一些我没有使用的代码。最困难的部分是识别"死"代码,并确保它广泛使用模板(否则我只是在删除水桶里的水滴)。

我知道这不是你想听到的解决方案,但我找不到任何其他可行的解决方案。

我在VS2015中已经为这个问题挣扎了几个星期。最后,我找到了链接器选项:/OPT:REF,可以在Project properties->Linker->Optomization->References下找到。这从输出DLL的大小中删除了大约12MB,并且在运行时不再抛出异常。