我正在尝试使用 /clr 标志在 Visual-studio-2013 中编译一个相对较大的遗留 C++ 项目。项目生成一个dll。
我收到以下运行时异常:
Type '<Module>' from assembly ... contains more methods than the current implementation allows
我必须补充一点,这种情况仅发生在调试配置中(发布 - 有效)。此外,该项目大量使用模板和宏,(我认为)这有助于生成大量的方法......
关于这个问题的文档很少甚至没有。我通过网络搜索得知的信息(不知道是否准确)是:
clr dll 中的方法数量限制为约 65K。所有本机类的所有方法都进入一些特殊的方法<Module>,因此它构成了全局限制。
一项建议是拆分项目,但这并不是一件很简单的事情,因为类间的依赖关系。我想这是可行的...
任何帮助,将不胜感激。
在使用 pinvoke 并在 Linux 上运行的 dotnet 核心应用程序中,当 c++ 抛出异常时 - 例如 -std::runtime_error我们得到:
terminate called recursively
terminate called after throwing an instance of 'terminate called after throwing an instance of 'std::runtime_error*'
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
即使外部 C++ 方法的调用包装在托管代码中的 try catch 块中。
如何在 dotnet core 托管代码中捕获和处理这个问题?