log4net和.net Framework 4.0

时间:2010-05-25 10:06:18

标签: .net-4.0 log4net

当我将我的解决方案更新到.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=Inheritance security rules violated while overriding member:  
'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'.  
Security accessibility of the overriding method must match the security accessibility of the method being overriden.
  Source=log4net
  TypeName=log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)
  StackTrace:
    at log4net.Repository.Hierarchy.Hierarchy..ctor(ILoggerFactory loggerFactory)
    at log4net.Repository.Hierarchy.Hierarchy..ctor() in C:\src\Repository\Hierarchy\Hierarchy.cs:line 150

5 个答案:

答案 0 :(得分:4)

  

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

这对我有用:

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

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

见这篇文章:

Weird override problem with Fluent NHibernate and .NET 4

答案 3 :(得分:0)

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

谢谢, Khachatur

答案 4 :(得分:0)

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