0

我正在为我们发布的应用程序调查一些小型转储。我无法在本地重现这些崩溃,但对于大量报告,我注意到加载的 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 的混合是否有原因?正常吗?知道这是否会导致问题,您是否推荐任何防止这种情况发生的方法?

4

1 回答 1

0

应用程序似乎可以加载多个版本。我重写了插件加载以使用直接的“Load”而不是“LoadFrom”,并将插件目录添加到应用程序的探测路径中。在此 Fusion Logger 显示 GAC 和 NI 目录之间不再有重复项之后。

http://msdn.microsoft.com/en-CA/library/823z9h8w(v=vs.80).aspx

不幸的是,由于开关引入了不稳定,我无法得到关于这个要点(减少启动时间)的真正答案,我无法获得干净的负载。我现在恢复了更改,如果我设法让东西加载干净,我会用结果更新答案。

于 2013-05-20T00:34:05.313 回答