【问题标题】:log4net and .net Framework 4.0log4net 和 .net 框架 4.0
【发布时间】:2010-05-25 10:06:17
【问题描述】:

当我将我的解决方案更新到 .net 4.0 时,我在 log4net 中遇到了问题,然后我下载了它的源代码并构建了 log4net 并将其定位到 .net 4.0 并在我的项目中使用它。

最初,当我提到针对运行时 2.0 的 log4net 时,它编译并运行了应用程序,但日志不起作用。

现在,当我使用面向 .net 4.0 的 log4net 运行我的项目时,我收到错误 "The type initializer for 'Log4NetTest.TestLog' threw an exception."

有什么办法解决这个问题吗?

编辑:这是内部异常:

InnerException: System.TypeLoadException Message=重写成员时违反了继承安全规则: 'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'。 覆盖方法的安全可访问性必须与被覆盖方法的安全可访问性相匹配。 来源=log4net TypeName=log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) 堆栈跟踪: 在 log4net.Repository.Hierarchy.Hierarchy..ctor(ILoggerFactory loggerFactory) 在 C:\src\Repository\Hierarchy\Hierarchy.cs:line 150 中的 log4net.Repository.Hierarchy.Hierarchy..ctor()

【问题讨论】:

  • 看看嵌套异常是什么——看看类型初始化器是什么异常,这将帮助你诊断它。
  • 乔恩,我在问题中添加了内部异常
  • 嗨,我通过将 [assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] 添加到 log4net AssemblyInfo 来修复它,但现在它没有记录
  • log4net 尚未在 4.0 上得到正式支持 - issues.apache.org/jira/browse/LOG4NET-233

标签: .net-4.0 log4net


【解决方案1】:

在 log4net 源代码中,添加一个 [SecurityCritical] 属性到 Util.ReadOnlyPropertiesDictionary.GetObjectData 方法和构建。

刚刚编译了目标框架 4.0(不是客户端)的源代码。 1.2.11 版本的源代码已经包含此属性,但请务必使用“NET_4_0”作为编译器参数。否则不会添加该属性。

【讨论】:

  • 我从 Apache.org 下载的项目仅在调试配置中定义了 NET_4_0。必须手动将其添加到 Release。
  • 我刚刚在 1.2.11 中为发布配置添加了 NET_4_0,它可以工作了!谢谢
【解决方案2】:

我在这里找到了用于 .NET 客户端配置文件的 log4net 编译版本:

http://gosheg.blogspot.com/2011/04/log4net-in-net-40-c-applications-net.html

【讨论】:

  • 谢谢!节省了我阅读所有那些解释如何下载源代码和调整的博客,而不是简单地在页面顶部添加download here :)
【解决方案3】:

这对我有用:

在 log4net 源代码中,将 [SecurityCritical] 属性添加到 Util.ReadOnlyPropertiesDictionary.GetObjectData 方法并构建。

您可能还需要做一些其他事情才能让它为 4.0 框架构建。

看到这篇文章:

Weird override problem with Fluent NHibernate and .NET 4

【讨论】:

    【解决方案4】:

    我已通过简单地从 Visual Studio 包管理器更新 Log4Net 包解决了类似的问题。

    谢谢, 哈恰图尔

    【讨论】:

      【解决方案5】:

      我通过添加 [程序集:System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] 来修复它 到 log4net AssemblyInfo 但现在它没有记录

      【讨论】:

      • 将此添加为答案,因为我无法将我的评论标记为答案
      猜你喜欢
      • 2010-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2011-07-05
      • 2010-12-18
      相关资源
      最近更新 更多