お客様からのミニダンプがあります。ロードされた .NET dll のアセンブリ バージョンを確認したいと考えています。私はすでに何時間もインターネットを検索しましたが、使用可能な方法が見つかりません。私はwindbgを持っていて、必要なclr.dllとmscordacwksを持っているSOS拡張機能をロードしました。
使用lm -v
すると、管理されていない dll のみが表示されます。私は非常に単純なものを見落としていると確信しています。
WinDbglm v
には、マネージおよびアンマネージのすべての DLL が表示されます。そのレベルでは、アセンブリは単なる DLL であり、単なるモジュールです。
WinDbg 6.3.9600 ではlm v
、モジュールに CLR ヘッダーがあるかどうかの情報も表示されます。
0:008> lmv m MyApp
start end module name
10310000 10574000 MyApp(deferred)
Image path: C:\...\MyApp.exe
Image name: MyApp.exe
Has CLR image header, track-debug-data flag not set
Timestamp: Wed May 21 16:34:02 2014 (537CB95A)
...
ProductVersion: 1.8.0.44
FileVersion: 1.8.0.44
...
ただし、FileVersion と ProductVersion は、DLL のネイティブ リソース部分にコンパイルされたアンマネージ情報のままです。
!SaveModule <start address> <filename>
ファイルをディスクに保存し、dotPeekなどのリフレクション ツールを使用してファイルを開き、そこからアセンブリ情報を取得することをお勧めします。これにより、名前、バージョン、カルチャ、および公開キー トークンが得られます。
すべてのモジュールを保存するために、Naveenは次のようなスクリプトを作成しました。
!for_each_module .if ($spat ("${@#ImageName}","*.exe")) { !SaveModule ${@#Base} c:\temp\${@#ModuleName}.exe } .else { !SaveModule ${@#Base} c:\temp\${@#ModuleName}.dll }