1

WinRT 应用程序中,当将调试器类型切换为混合(从托管)时,应用程序无法启动。暂停调试器显示执行位于:

static void Main(string[] args)
 {
     global::Windows.UI.Xaml.Application.Start((p) => new App());
 }

输出窗口不断将 EETypeLoadExceptions 显示为不同的内存位置:

ApplicationName.exe 中 0x757E4B32 处的第一次机会异常:Microsoft C++ 异常:内存位置 0x0BF7D134 处的 EETypeLoadException。

看起来 CLR 异常是:

CLR:(C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll) Rejecting native image because native image dependency C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll had a different identity than expected

我需要使用本机调试器进行SOS 调试扩展 (SOS.dll)

当创建一个新的空白应用程序然后添加与我的应用程序相同的依赖项时,我没有遇到问题,所以它是我的应用程序特有的。

关于问题是什么或如何进一步排除故障的任何想法?任何有使用 WinRT 应用程序的 SOS 调试扩展 (SOS.dll) 经验的人?

4

1 回答 1

1

我有一个托管应用程序调用本机 COM 对象,这些对象反过来又回调一些托管 COM 实例。在某个时候,当本机 COM 回调托管 COM 对象时,会引发EETypeLoadException

事实证明,我在不同的项目中有几个具有相同名称(Common.dll)的程序集。由于所有程序集都是未签名的,.NET 运行时无法加载具有相同名称的两个不同程序集,并通过EETypeLoadException报告问题。

我希望诊断更详细,但至少在我的情况下它现在已经解决了。

于 2013-09-26T22:52:52.210 回答