我在面向 .NET Framework 4 Client Profile 的控制台应用程序中编写此代码。
this.container.AddFacility<LoggingFacility>(
f => f.LogUsing(LoggerImplementation.Log4net));
当它运行时,它因类型转换错误而失败。
Could not convert from 'Castle.Services.Logging.Log4netIntegration.Log4netFactory,Castle.Services.Logging.Log4netIntegration,Version=2.5.1.0, Culture=neutral,PublicKeyToken=407dd0808d44fbdc' to System.Type - Maybe type could not be found
这是因为 CaSTLe.Services.Logging.log4netIntegration 程序集未复制到输出文件夹。作为仅运行时的依赖项,这不会破坏构建。
查看构建过程,我发现它没有复制 log4net 或 CaSTLe 设施程序集,因为它们依赖于 Client Profile 中不可用的 System.Web。更改为标准配置文件意味着此依赖项可用并且可以添加该设施。
为什么要这样做?我没有针对旨在用作服务器上的计划任务的控制台应用程序中的客户端配置文件有什么区别?
请您参考如下方法:
一些附加程序依赖于 System.Web,例如 AspNetTraceAppender。开发人员唯一可用的其他选择是将不依赖于 System 核心的组件拆分为单独的程序集,但这会破坏 log4net 的美感,因为它使用起来非常简单。此外,在撰写 log4net 时,我不相信有客户端配置文件这样的东西。
由于 log4net 是开源的,因此没有什么可以阻止您下载源代码并删除有问题的类并创建您自己的以客户端配置文件为中心的 log4net 程序集。
http://www.thecodeking.co.uk/2010/08/making-log4net-work-with-net-client.html