从程序集中键入“<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
我必须补充一点,这仅发生在调试配置中(发布 - 有效)。此外,该项目大量使用模板和宏,(我想)这有助于生成大量方法...
几乎没有关于此问题的文档。
我在网上查到的(不知道对不对)是:
clr dll 中的方法有约 65K 个限制。所有原生 classes 的所有方法都进入了一些特殊的 <Module>
,因此它构成了全局限制。
一个建议是拆分项目,但由于 class 之间的依赖关系,这不是很简单。我想这是可行的...
如有任何帮助,我们将不胜感激。
我最终将代码分成两个 dll,并删除了一些我没有使用的代码。困难的部分是识别 "dead" 代码并确保它广泛使用模板(否则我只是在删除桶中的滴)。
我知道这不是您想听到的解决方案,但我找不到任何其他可行的解决方法。
我在 VS2015 上已经为这个问题苦苦挣扎了几周。最后我找到了链接器选项:/OPT:REF
,它可以在 Project properties->Linker->Optomization->References
下找到。这从输出 DLL 的大小中删除了大约 12MB,并且在 运行 时间不再抛出异常。
我正在尝试使用 /clr 标志在 visual-studio-2013 中编译一个相对较大的遗留 c++ 项目。项目生成dll.
我得到以下 运行 时间异常:
Type '<Module>' from assembly ... contains more methods than the current implementation allows
我必须补充一点,这仅发生在调试配置中(发布 - 有效)。此外,该项目大量使用模板和宏,(我想)这有助于生成大量方法...
几乎没有关于此问题的文档。 我在网上查到的(不知道对不对)是:
clr dll 中的方法有约 65K 个限制。所有原生 classes 的所有方法都进入了一些特殊的 <Module>
,因此它构成了全局限制。
一个建议是拆分项目,但由于 class 之间的依赖关系,这不是很简单。我想这是可行的...
如有任何帮助,我们将不胜感激。
我最终将代码分成两个 dll,并删除了一些我没有使用的代码。困难的部分是识别 "dead" 代码并确保它广泛使用模板(否则我只是在删除桶中的滴)。
我知道这不是您想听到的解决方案,但我找不到任何其他可行的解决方法。
我在 VS2015 上已经为这个问题苦苦挣扎了几周。最后我找到了链接器选项:/OPT:REF
,它可以在 Project properties->Linker->Optomization->References
下找到。这从输出 DLL 的大小中删除了大约 12MB,并且在 运行 时间不再抛出异常。