先日のエントリですが、原因がわかりました。参照先で使用しているDLLではLOG4NETを使用しているのですが、このLOG4NETがなぜかGACに登録されたものを参照していました。その結果、テスト環境で実行しようとしてもGACに登録されたLOG4NETアセンブリが存在しないため参照がなく実行時例外として System.TypeInitializationException がスローされていたわけです。(テスト環境では、LOG4NETはGACへ登録されていないのです。)
それにしても、この現象はとてもやっかいですね。何がやっかいって、ディプロイした実行ファイルと参照ファイルにはすべてのアセンブリがそろっているにもかかわらず、実行時には例外となってしまうわけです。一見しただけでは、なぜ例外がスローされるかわからないですね。
(もっともGACへ登録するアセンブリは限定するべきなのですがね。)
で、ここまで書いていてわからない点が一つ出てきました。GACに登録されている厳密名付きのアセンブリを参照する場合、
- GACに該当するアセンブリがあるか確認する。
- 実行しているアセンブリの同一フォルダに該当するアセンブリがあるか確認する。
というプロセスを経るという認識だったのですが、今回はどうも違う模様。ということは、何か異なる現象が発生しているのかしら…?時間ができたら プログラミング .NET Framework 第3版 (マイクロソフト公式解説書)をきちんと読みたいと思います。手元にあるものを見たところ、第2章から第3章に書かれている内容っぽいので。