pea*_*dog 4 .net c# log4net ilmerge
我有一个非常适度的应用程序,只有一个外部程序集(log4net.dll),我想使用ILMerge.我合并了App.exe和log4net.dll,生成的可执行文件(New.exe)似乎正常工作.但是,New.exe不再记录,并且在合并之前它正在记录正常.请记住,我在测试New.exe之前复制了App.exe.config.
我不知道该怎么做.有没有人知道为什么会这样?我错误地使用了ILMerge.exe一些怎么样?Reflector似乎表明New.exe是"整体"; 我可以看到Log4net程序集和一切.
我不知道log4net的内部,但我怀疑它正在寻找log4net程序集,因为你把它合并到new.exe中找不到它.解决方案是在AppDomain中为AssemblyResolve事件提供一个将log4net.dll重新映射到new.exe的函数.
我的直接猜测是,通过更改log4net程序集的程序集名称,您可以以某种方式破坏它的类型解析,可能是日志配置.
请记住,您的类型名称现在不同.
这意味着类型名称如
log4net.Appender.RollingFileAppender, log4net
Run Code Online (Sandbox Code Playgroud)
现在会
log4net.Appender.RollingFileAppender, new
Run Code Online (Sandbox Code Playgroud)
(或某些)
检查您的日志记录配置,完全限定任何appender,布局模式等(基本上任何出现在config中的log4net类型名称)以指向您的新程序集.
此外,如果您的日志配置位于web.config或app.config中(而不是单独的文件),则部分定义还需要修改:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net" />
Run Code Online (Sandbox Code Playgroud)
会变得像
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,
new" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1199 次 |
最近记录: |