0

私がこれを尋ねる理由は、log4net.dllがGACになく、現在のExecuting Assemblyディレクトリにない場合、castleLogging機能はそれを検出しないためです。

CastleとWindsorを使用してロギングを行うために複数のクライアントアプリケーションで使用されるクラスライブラリを構築しました。クラスライブラリでlog4net.dllへの参照はまったく必要ないことに気付きました。必要なのは、実行時にdllを表示できるようにします。

ですから、参照が本当にどこにあるのか疑問に思っています。クラスライブラリに入れると、ローカルコピーがtrueであってもクライアントにコピーされないため、実際には直接使用されないためだと思います。

4

1 に答える 1

1

Castleロギング機能を機能させるには、log4net.dllを提供する必要があります(log4netを使用するようにロギング機能を構成していると仮定します)。Castle.CoreのILoggerインターフェースを使用して実際にログメッセージを書き込むようになるため、プロジェクトでlog4netを直接参照する必要がなくなったのは正しいことです。アプリケーションは、間接的ではありますが、依然としてlog4netに依存しています。

Visual Studioは通常、これらの種類の「間接」参照(AはBに依存し、BはCに依存します)を適切に処理します(CをAの出力ディレクトリにコピーします)。ただし、Cがビルドを実行しているマシンのGACにある場合は、間接参照をコピーしません(CをAの出力ディレクトリにコピーしません)

私の推測では、開発マシンにlog4net.dllGACがあります。

これを解決するには、log4net.dllをGACから(およびアプリをビルドする任意のマシンのGACから)削除するか、最上位の実行可能ファイル(プロジェクトA)でlog4net.dllを明示的に参照する必要があります。上記の例では)「ローカルコピー」をtrueに設定します。これにより、コンパイラはdllを出力ディレクトリにコピーします。

この問題は、このSOの質問でも議論されました

于 2012-11-27T22:03:21.683 に答える