我正在尝试使用/ 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>
,因此它会带来全局限制。
一个建议是拆分项目,但由于类间依赖性,这不是很简单。我想这是可行的......
任何帮助都将不胜感激。
答案 0 :(得分:1)
我最终将代码分成两个dll,并删除了一些我没有使用的代码。困难的部分是识别“死”代码并确保它广泛使用模板(否则我只是删除了一个桶中的滴)。
我知道这不是您想要听到的解决方案,但我找不到任何其他可行的解决方法。
答案 1 :(得分:0)
在VS2015上,我一直在努力解决这个问题。最后,我找到了链接器选项:/OPT:REF
,可以在Project properties->Linker->Optomization->References
下找到。这从输出DLL的大小中删除了大约12MB,并且在运行时不再抛出异常。