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 はモジュール ペインにロードされた 1 つのバージョンのみを一覧表示します。さらに、Fusion は NativeImage バージョンのロード時にエラーを報告しません。私が想定しているのは、通常の警告です。

WRN: ネイティブ イメージは LoadFrom コンテキストではプローブされません。ネイティブ イメージは、Assembly.Load() のように、既定の読み込みコンテキストでのみプローブされます。

私の知る限り、これらのバイナリを参照するために LoadFrom を使用していないので...

コールスタックに NativeImage と通常の Dll が混在している理由はありますか? それは正常ですか?これが問題を引き起こしている可能性があるかどうか、また、これを防ぐ方法をお勧めしますか?

4

1 に答える 1

0

アプリケーションが複数のバージョンをロードできるようです。「LoadFrom」ではなくストレートな「Load」を使用するようにプラグインのロードを書き直し、アプリケーションのプローブ パスにプラグイン ディレクトリを追加しました。この後、Fusion Logger は GAC と NI のディレクトリ間で重複を示さなくなりました。

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

残念ながら、スイッチが不安定になり、クリーンなロードを取得できなかったため、これの主なポイント (起動時間の短縮) について本当の答えを得ることができませんでした。今のところ変更を元に戻しました。問題なくロードできたら、結果で回答を更新します。

于 2013-05-20T00:34:05.313 に答える