当我将我的解决方案更新到.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
答案 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框架构建,可能还需要做一些其他事情。
见这篇文章:
答案 3 :(得分:0)
我已经通过简单地从Visual Studio包管理器更新Log4Net包修复了类似的问题。
谢谢, Khachatur
答案 4 :(得分:0)
我通过添加[assembly:System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
来修复它
到log4net AssemblyInfo但现在它没有记录