我在针对.NET Framework 4 Client Profile的控制台应用程序中编写此代码.
this.container.AddFacility<LoggingFacility>(
f => f.LogUsing(LoggerImplementation.Log4net));
Run Code Online (Sandbox Code Playgroud)
运行时,它会因类型转换错误而失败.
无法从'Castle.Services.Logging.Log4netIntegration.Log4netFactory,Castle.Services.Logging.Log4netIntegration,Version = 2.5.1.0,Culture = neutral,PublicKeyToken = 407dd0808d44fbdc'转换为System.Type - 可能无法找到类型
这是因为Castle.Services.Logging.log4netIntegration程序集未复制到输出文件夹.作为仅限运行时的依赖项,这不会破坏构建.
查看构建过程,我发现它没有复制log4net或Castle工具程序集,因为它们依赖于Client.Web,而Client.Web在客户端配置文件中不可用.更改为标准配置文件意味着此依赖关系可用,并且可以添加设施.
为什么这样做?我的目标是在服务器上用作计划任务的控制台应用程序中的客户端配置文件,这有什么区别?
一些appender依赖于System.Web,例如AspNetTraceAppender.开发人员可用的唯一其他选项是将不依赖于System核心的组件拆分为单独的程序集,但这会破坏log4net的优点,因为它使用起来非常简单.另外,在编写log4net时,我不相信它们就像客户端配置文件那样.
由于log4net是开源的,因此没有什么能阻止您下载源代码并删除有问题的类并创建自己的客户端配置文件中心log4net程序集.
http://www.thecodeking.co.uk/2010/08/making-log4net-work-with-net-client.html