組織内の他の人によって構築された複数のライブラリに依存するアプリケーションがあり、そのうちの 1 つが機能しなくなりました。コマンドラインで次のエラーが表示されます。
Unhandled Exception: System.IO.FileLoadException: A procedure imported by 'XXX.dll' could not be loaded.
私は Dependency Walker を開いて問題の原因を突き止めようとしましたが、私は Dependency Walker の初心者であり、自分が何をしているのかよくわかりません。ログウィンドウに表示される内容は次のとおりです。
Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
次の点を除いて、これは簡単に思えます。
- DW に慣れていないため、このエラーが実際に参照しているモジュールを見つけることができないようです
- 古いバージョンのアプリケーションに同梱されている同じ DLL は、まだ機能しており、Dependency Walker で同じことを示しています。
古い DLL と新しい DLL の唯一の違いは、新しい DLL では KERNEL32.DLL が赤色で表示され、関数 K32EnumProcessModules が赤色で表示される (エクスポートされていない) ことです。この同じ関数は、古い DLL ではまったく表示されません (緑色またはそれ以外)。
これまでの要約: 1 つの DLL は動作し、もう 1 つは動作しません。どちらも Dependency Walker で「悪い」と表示されますが、関数 K32EnumProcessModules が悪いと表示されるのは 1 つだけです。この関数が「未解決のインポート」エラーの原因であるかどうかはわかりません。調査したいと思います。
これを引き起こした可能性があると思われるアプリケーションで行った唯一の変更は、ランタイムを .NET 2.5 から .NET 4 にアップグレードしたことです。 2.5 以上の .NET コンポーネントを呼び出さないでください。同じライブラリを使用している私の組織の他の人は、.NET 4 で問題なく動作すると報告しています。
ほとんどの場合、どの情報がこの問題のトラブルシューティングに役立つかわからないため、まばらな情報を提供していることに気付きました。詳細を確認するために実行してほしいテストがある場合はお知らせください。