.net 程序集中的类型“< Module>”包含的方法超过了当前实现允许的数量

xv8emn3q  于 2023-11-20  发布在  .NET
关注(0)|答案(3)|浏览(139)

我尝试在visual-studio-2013中使用/clr标记编译一个相对较大的遗留c++项目。该项目生成一个dll。
我得到以下运行时异常:
第一个月
我必须补充的是,这种情况只发生在Python配置中(Release - Works)。此外,该项目大量使用模板和宏,(我想)这有助于生成大量的方法.
关于这个问题几乎没有任何文档。我从网上搜索到的信息(不知道是否准确)是:
在clr dll中有一个~ 65 K方法的限制。所有本机类的所有方法都进入一些特殊的<Module>,所以它构成了一个全局限制。
一个建议是拆分项目,但由于类间的依赖性,这并不是很简单。我想这是可行的。
如果你能帮忙的话,我将不胜感激。

envsm3lx

envsm3lx1#

最后我把代码分成了两个dll,并删除了一些我没有使用的代码,困难的部分是识别“死”代码并确保它广泛地使用模板(否则我只是在一个水桶中删除水滴)。
我知道这不是一个你想听到的解决方案,但我找不到任何其他工作的变通办法。

vlf7wbxs

vlf7wbxs2#

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

yc0p9oo0

yc0p9oo03#

您可以尝试为C++/CLI项目启用预编译头文件。
在禁用使用预编译头文件后,我在编译器构建中遇到了这个限制/错误。然后不得不使用Scott的答案提供的/OPT:REF技巧。值得称赞。但似乎使用预编译头文件也可以减少总方法。

相关问题