从程序集中键入“<module>”包含比当前实现允许的方法更多的方法

时间:2015-06-25 13:53:20

标签: c++ .net clr

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

我得到以下运行时异常:

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

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

关于这个问题几乎没有文档。 我从网上搜索知道的(不知道它是否准确)是:

clr dll中有~65K方法的限制。所有本地类的所有方法都会进入一些特殊的<Module>,因此它会带来全局限制。

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

在VS2015上,我一直在努力解决这个问题。最后,我找到了链接器选项:/OPT:REF,可以在Project properties->Linker->Optomization->References下找到。这从输出DLL的大小中删除了大约12MB,并且在运行时不再抛出异常。