我们有一个应用程序是一个C / C ++ / MFC桌面应用程序,有一些C ++ / CLI程序集允许我们访问一些托管代码功能。应用程序仅在启动时以发布模式崩溃
未处理的类型' System.TypeInitializationException'发生在未知模块中。 附加信息:''的类型初始值设定项抛出异常。
如何调试此方案以及混合托管/非托管代码有哪些问题?我必须采取哪些特殊步骤才能使它们发挥得很好?
答案 0 :(得分:0)
值得怀疑的是:
缺少非托管DLL。您可以使用Depends(来自Sysinternals)并开始分析,但我很难在混合模式下获得良好的结果。
创建具有相同依赖关系的本机最小测试工具,并通过Depends运行 - 您将获得有关丢失的DLL的确切信息。
您是否在发布版本产品中使用了混淆? 我们使用的混淆软件在评估模式中为类型添加了一个字段。我们有固定的偏移结构,但新字段没有明确的偏移量。这是一个错误,如果它在我们自己的代码中,它将在编译时标记出来。由于混淆器是动态修补程序集,因此CLR没有选项,但无法在运行时加载无效类型。
答案 1 :(得分:0)
在我看来(基于我遇到的一些麻烦)Matt Smith的评论是最有用的答案;实际上,检查所有类型的异常'Thrown'。通常问题是全局对象的构造函数崩溃。另见答案5
http://www.codeproject.com/Questions/67419/The-type-initializer-for-threw-an-exception
说(除其他外):
点击调试 - >例外并检查所有Thrown复选框。这个 将导致调试器停止所有第一次机会异常和 将帮助您找到Type Initializer错误下的错误 你看到了。如果它与另一个组件相关,就像我的那样,你 可以使用Microsoft的Assembly Binding Log Viewer工具来帮助确定 问题。