从装配中键入'<Module>'...包含比当前实现允许的更多的方法
Type '<Module>' from assembly ... contains more methods than the current implementation allows
我正试图使用/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,并且在运行时不再抛出异常。
相关文章:
- 实现无开销push_back的最佳方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 这是实现图形的坏方法吗
- 在 c++ 中实现嵌套循环的更短方法吗?
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 如何在从抽象基派生的类中实现相同的方法?
- C++数组队列实现方法错误
- 有没有一种通用的方法来实现不变量
- 'using namespace'实现细节的便捷方法(仅标头库)?
- 使用非递归插入方法实现 AVL 树
- C ++类型特征:确保子类实现方法
- 实现基于数字值(正、负、零)的条件表达式的最佳方法
- 在C++上实现高斯赛德尔迭代方法
- C++方法实现:是否可以避免每次都键入类名?
- 如何知道C2259 VS 2017错误未实现哪种方法?
- C++强制在子类中实现方法,但具有不同的签名
- 避免在每个派生类中重新实现方法调用
- C :执行模板类型实现方法
- 在C++中实现方法时继承不起作用
- 还有更好的实现方法吗?