65.9K
CodeProject 正在变化。 阅读更多。
Home

让 Log4Net 与 .NET 客户端配置文件一起工作

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (17投票s)

2010 年 9 月 3 日

CPOL

2分钟阅读

viewsIcon

74027

downloadIcon

2052

一步一步指导,让 Log4Net 与 .NET 客户端配置文件一起工作

背景

我最近一直在开发一个针对 Microsoft .NET Framework 4 客户端配置文件的桌面应用程序,在使用 log4net 时遇到问题。问题在于 .NET 客户端配置文件不包含 log4net 程序集所需的任何 Web 相关程序集,特别是对于 AspNetTraceAppender 类。

结果是,C# 编译器无法解析 log4net 引用,这导致“找不到引用”的编译器错误。在使用 Visual Studio 时,似乎它无法在构建项目时找到 log4net DLL,但实际上这是由于缺少依赖项引起的。显示的错误如下

Error 1 The type or namespace name 'log4net' could not be found 
(are you missing a using directive or an assembly reference?)

针对此问题已经有一些公开的工单(LOG4NET-174LOG4NET-233),但没有迹象表明何时(或是否)会解决此问题。

解决方案

幸运的是,log4net 是开源的,解决方案相对简单,虽然可能并不完全显而易见。以下步骤将允许您构建一个可以与针对 3.5 或 4 客户端配置文件的应用程序一起工作的 log4net 的自定义版本。

  1. 下载 log4net 源代码
  2. 使用 Visual Studio 2010 打开并升级解决方案
  3. 删除 System.Web 项目引用
  4. 从项目中排除 Appender\AspNetTraceAppender.cs
  5. 添加对 System.Configuration 的引用
  6. 导航到 项目 -> log4net 属性,并选择“应用程序”选项卡
  7. 将目标框架更改为 .NET Framework 3.5 客户端配置文件
  8. 选择“生成”选项卡,并将配置更改为“调试”
  9. 条件编译符号下,将其更改为 NET;NET_1_0;NET_2_0;
  10. 将配置更改为“发布”
  11. 条件编译符号下,将其更改为 STRONG;NET;NET_1_0;NET_2_0;
  12. 编辑 AssemblyInfo.cs 类,并使用有效的强密钥更新 AssemblyKeyFile 属性
  13. 以发布模式编译项目并分发新的程序集

请注意,log4net 必须编译为 3.5 客户端配置文件,而不是 4 客户端配置文件。这允许程序集与框架的这两个版本正确工作。由于某种原因,编译为 4 会导致框架内部出现运行时错误,而我没有时间解决。

为了方便起见,我通过此页面提供了一个为客户端配置文件编译的 log4net DLL 版本,但请注意,强名称与官方版本不匹配。

© . All rights reserved.