应用程序在使用ILMerge后停止记录

时间:2011-04-07 14:30:24

标签: c# .net log4net ilmerge

我有一个非常适度的应用程序,只有一个外部程序集(log4net.dll),我想使用ILMerge。我合并了App.exe和log4net.dll,生成的可执行文件(New.exe)似乎正常工作。但是,New.exe不再记录,并且在合并之前它正在记录正常。请记住,我在测试New.exe之前复制了App.exe.config。

我不知道该怎么做。有没有人知道为什么会这样?我错误地使用了ILMerge.exe一些怎么样? Reflector似乎表明New.exe是“整体”;我可以看到Log4net程序集和所有内容。

3 个答案:

答案 0 :(得分:5)

我不知道log4net的内部,但我怀疑它正在寻找log4net程序集,因为你把它合并到new.exe中找不到它。解决方案是在AppDomain中为AssemblyResolve事件提供一个将log4net.dll重新映射到new.exe的函数。

答案 1 :(得分:5)

我的直接猜测是,通过更改log4net程序集的程序集名称,您可能会以某种方式破坏它的类型解析,可能是日志配置。

请记住,您的类型名称现在不同了。

这意味着类型名称,例如

log4net.Appender.RollingFileAppender, log4net

现在是

log4net.Appender.RollingFileAppender, new

(或某些人)

检查您的日志记录配置,完全限定任何appender,布局模式等(基本上是配置中出现的任何log4net类型名称)以指向您的新程序集。

此外,如果您的日志配置位于web.config或app.config中(而不是单独的文件),则部分定义也需要修改:

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

会变成类似

的东西
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, 
    new" />

答案 2 :(得分:0)

尝试在GAC中注册log4net并查看是否有帮助