gpt4 book ai didi

.net - 为什么 log4net 1.2.10 需要 System.Web?

转载 作者:行者123 更新时间:2023-12-04 12:43:07 24 4
gpt4 key购买 nike

我在面向 .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

  • 下载log4net源码
  • 使用 Visual Studio 2010 打开和升级解决方案
  • 删除 System.Web 项目引用
  • 从项目中排除 Appender\AspNetTraceAppender.cs 类
  • 添加对 System.Configuration
  • 的引用
  • 导航到项目 -> log4net 属性,然后选择应用程序选项卡
  • 将目标框架更改为 .NET Framework 3.5 Client Profile
  • 选择 Build 选项卡,并将配置更改为 Debug
  • 在条件编译符号下,将其更改为 NET;NET_1_0;NET_2_0;
  • 将配置更改为 Release
  • 在条件编译符号下,将其更改为 STRONG;NET;NET_1_0;NET_2_0;
  • 编辑 AssemblyInfo.cs 类并使用有效的强键更新 AssemblyKeyFile 属性
  • 以 Release 模式编译项目并分发新程序集
  • 关于.net - 为什么 log4net 1.2.10 需要 System.Web?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281542/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com