我有一个非常适度的应用程序,只有一个外部程序集(log4net.dll),我想使用ILMerge。我合并了App.exe和log4net.dll,生成的可执行文件(New.exe)似乎正常工作。但是,New.exe不再记录,并且在合并之前它正在记录正常。请记住,我在测试New.exe之前复制了App.exe.config。
我不知道该怎么做。有没有人知道为什么会这样?我错误地使用了ILMerge.exe一些怎么样? Reflector似乎表明New.exe是“整体”;我可以看到Log4net程序集和所有内容。
答案 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并查看是否有帮助