4

ILMerge を使用したい単一の外部アセンブリ (log4net.dll) を持つ非常に控えめなアプリケーションがあります。App.exe と log4net.dll をマージすると、結果の実行可能ファイル (New.exe) が正しく動作するように見えます。ただし、New.exe はログを記録しなくなり、マージされる前は問題なくログを記録していました。New.exe をテストする前に、App.exe.config をコピーしたことに注意してください。

これをどうすればいいのかわからない。なぜこれが起こるのか誰にも分かりますか?ILMerge.exe を誤って使用したことがありますか? Reflector は、New.exe が「完全」であることを示しているようです。Log4net アセンブリとすべてが表示されます。

4

3 に答える 3

5

log4net の内部構造はわかりませんが、log4net アセンブリを探していて、new.exe にマージしたため見つからないのではないかと思います。これに対する解決策は、AppDomain の AssemblyResolve イベントに、log4net.dll を new.exe に再マップする関数を提供することです。

于 2011-04-07T15:41:17.710 に答える
5

私の当面の推測では、log4net アセンブリのアセンブリ名を変更することで、おそらくログ構成のために、何らかの形で型解決を壊したと思います。

タイプ名が異なることに注意してください。

これは、次のような型名を意味します。

log4net.Appender.RollingFileAppender, log4net

今だろう

log4net.Appender.RollingFileAppender, new

(またはそのようなもの)

ロギング構成を確認し、新しいアセンブリを指すようにアペンダー、レイアウト パターンなど (基本的に構成に表示されるすべての log4net タイプ名) を完全に修飾します。

さらに、ログ構成が web.config または app.config (別のファイルではなく) にある場合は、セクション定義も修正する必要があります。

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, 
    log4net" />

のようなものになるだろう

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, 
    new" />
于 2011-04-07T16:06:26.830 に答える
0

log4netをGACに登録してみて、それが役立つかどうかを確認してください

于 2011-04-07T14:45:12.150 に答える