クラッシュ ダンプを使用して分析しようとしましたが、マシンに一致するmscordacwks.dllMicrosoft.Diagnostics.Runtime
がありません。
どうすればよいか、または Microsoft のシンボル サーバーからどのように取得できますか?
クラッシュ ダンプを使用して分析しようとしましたが、マシンに一致するmscordacwks.dllMicrosoft.Diagnostics.Runtime
がありません。
どうすればよいか、または Microsoft のシンボル サーバーからどのように取得できますか?
mscordacwks.dll が見つからないことは、WinDbg を使用してクラッシュ ダンプ ファイルを調べるときに時々遭遇する苦痛です (同じ最終目標を達成するために ClrMD を使用しようとしていることに気付きました)。通常、Microsoft シンボル サーバーはかなり包括的ですが、mscordacwks.dll の場合、パブリック シンボル サーバーにすべてのバージョンが存在するわけではありません (ここで説明されているように)。一致する mscordacwks.dll バージョンを取得する最善の方法は、パブリック シンボル サーバーに障害が発生した場合に、クラッシュ ダンプが作成されたマシン (および適切な .net Framework フォルダー) からプルすることです。
正直なところ、私はどちらかというと WinDbg ユーザーなので、そこで mscordacwks を扱うことに慣れていますが、Google で調べてみると、興味深い記事がいくつか見つかりました。最初に、これを行うことができると述べました:
// DataTarget.ClrVersions lists the versions of CLR loaded in the process (this may be
// v2 and v4 in the Side-By-Side case.
ClrInfo version = target.ClrVersions[0];
// CLRVersionInfo contains information on the correct Dac dll to load. This includes
// the long named dac, the version of clr, etc. This is enough information to request
// the dac from the symbol server (though we do not provide an API to do this). Also,
// if the version you are debugging is actually installed on your machine, DacLocation
// will contain the full path to the dac.
string dacLocation = version.TryGetDacLocation();
それが機能しない場合は、より複雑なDacLocatorクラスのコードを投稿した人がいます。うまくいけば、必要なバージョンの dll をロードするために、これら 2 つの方法のいずれかが機能するはずです。
ClrVersion クラスに TryDownloadDac メソッドが追加されました。DAC ライブラリをプロセスに正常にロードするには、デバッグ中のアプリケーションが実行されたのと同じアーキテクチャ (64 ビット/32 ビット) でプロセスを実行する必要があります。