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

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

于 2011-04-07T14:45:12.150 回答