log4net 和 .NET Framework 4.0

3

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

最初,当我引用面向运行时2.0的log4net时,它编译和运行应用程序,但日志无法正常工作。

现在,当我运行面向.net 4.0的log4net的项目时,会出现错误““Log4NetTest.TestLog”的类型初始值设定项引发异常。”

有什么想法如何解决此问题吗?

编辑:这是内部异常:

System.TypeLoadException消息=在重写成员时违反继承安全性规则:  
'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)
StackTrace:
    at log4net.Repository.Hierarchy.Hierarchy..ctor(ILoggerFactory loggerFactory)
    at log4net.Repository.Hierarchy.Hierarchy..ctor() in C:\src\Repository\Hierarchy\Hierarchy.cs:line 150

1
看看嵌套异常是什么 - 看看类型初始化器是哪种异常,这将有助于你诊断它。 - Jon Skeet
Jon,我在问题中添加了内部异常。 - Aneef
你好,我通过在log4net的AssemblyInfo中添加[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]来解决了这个问题,但现在它不再记录日志。 - Aneef
log4net目前尚未官方支持4.0 - https://issues.apache.org/jira/browse/LOG4NET-233 - Merlyn Morgan-Graham
5个回答

4
在log4net源代码中,为Util.ReadOnlyPropertiesDictionary.GetObjectData方法添加一个[SecurityCritical]属性并构建。
刚刚编译了针对框架4.0的源代码(不是客户端)。版本1.2.11的源代码已经包含这个属性,但一定要使用“NET_4_0”作为编译器参数。否则,此属性将不会被添加。

1
我从Apache.org下载的项目只在Debug配置中定义了NET_4_0,必须手动将其添加到Release配置中。 - myforums
1
我刚刚在1.2.11版本的发布配置中添加了NET_4_0,它可以正常工作!谢谢。 - sergtk

3

谢谢!这让我省去了阅读所有博客的时间,他们解释如何下载源代码并进行调整,而不是简单地在页面顶部添加“下载此处” :) - Hertzel Guinness

2
这对我有用:
在log4net源代码中,为Util.ReadOnlyPropertiesDictionary.GetObjectData方法添加[SecurityCritical]属性并构建。
可能还有其他一些事情需要做才能将其构建为4.0框架。
请参阅此帖子:
{{link1:Fluent NHibernate和.NET 4的奇怪覆盖问题}}

0

我通过从Visual Studio包管理器中更新Log4Net软件包来解决了类似的问题。

谢谢, Khachatur


0
我通过在log4net的AssemblyInfo中添加 [assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] 来解决了问题,但现在它不再记录日志。

将以下与编程相关的内容从英语翻译成中文。仅返回已翻译的文本: - Aneef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接