.NET4.0で実行されているビジネスレイヤーの単体テストを作成しています。ビジネスレイヤーは、通常、SOAPおよびREST Webサービス内で実行される単純なC#クラスライブラリです。このアプリケーションは、ロギング用に別のラッパーアセンブリ内でlog4netを使用します。ロギングアセンブリのC#コードには、log4netに構成ファイルの名前を通知するアセンブリ情報ディレクティブがあります。
[アセンブリ:log4net.Config.XmlConfigurator(ConfigFile = "AcmeLogging.config"、Watch = true)]
ラッパーを介したlog4netの初期化は、Webサービスで正常に機能します。単体テストアセンブリを使用して初期化すると、構成ファイルが表示されないように見えます。configuratinoファイルは、実行ディレクトリにコピーされるようにプロパティを介して構成され、bin\debugディレクトリに表示されます。同じフォルダ内から実行されているロギングアセンブリを使用したクイックコンソールテストプログラムは正常に機能します。不思議なことに、動作の問題は断続的であり、さまざまな開発者のマシンにさまざまな時間に発生し、決定論的な方法で解決することはできません。
ラッパーアセンブリコードをステップスルーすると、log4netLogManager.GetLogger()呼び出しは正しく返されるように見えますが、log.Logger.Repository.GetAppenders()によって返されるアペンダーのリストは空です。この誤った動作は、ファイルがBin \ Debugフォルダーにあるかどうかに関係なく同じであるため、ファイルが表示されていないと考えられます。
Microsoft Test Frameworkでlog4netを実行することについて私たちが見逃していることについての手がかりは、大いにありがたいです。