我正在为我们发布的应用程序调查一些小型转储。我无法在本地重现这些崩溃,但对于大量报告,我注意到加载的 dll 列表包括常规和 .ni。一些 WPF dll 的版本。
来自 VS 2010 的“模块”窗格,例如 PresentationCore(在此处格式化)
PresentationCore.dll C:\Windows...\PresentationCore.dll - 已加载符号。C:\Users...\PresentationCore.pdb
PresentationCore.ni.dll *C:\Windows...\PresentationCore.ni.dll - 找不到匹配的二进制文件。PresentationFramework.Aero.dll *C:\Windows...\PresentationFramework.Aero.dll - 找不到匹配的二进制文件 PresentationFramework.Aero.ni.dll *C:...\NativeImages...\PresentationFramework.Aero.ni.dll - 没有找到匹配的二进制文件。
基本上,看起来我们正在加载 NativeImage 和 JIT 版本。这可能吗?
我在本地机器上检查了我们发布的产品的负载,Visual Studio 只列出了模块窗格中加载的单个版本。此外,Fusion 在加载 NativeImage 版本时没有报告错误,我认为这是通常的警告:
警告:将不会在 LoadFrom 上下文中探测本机图像。本机映像只会在默认加载上下文中进行探测,例如使用 Assembly.Load()。
据我所知,我们不使用 LoadFrom 来引用这些二进制文件,所以......
我在调用堆栈中看到 NativeImage 和普通 Dll 的混合是否有原因?正常吗?知道这是否会导致问题,您是否推荐任何防止这种情况发生的方法?