[英]Including log4net into a .net web application built with .net 4.0
我看到网上有很多很多关于这个的帖子,也是在stackoverflow中,但我找不到任何方法来解决我的问题。 我现在已经尝试了3件事,但这一切都没有用:
所以,我从网上搜索,发现它可能与log4net.dll编译的版本有关。 哪个是奇怪的但是无论如何,我遇到了一个错误,它要求我为程序集生成一个强密钥,这就是我所做的和编译所以我发布了这个项目并将log4net.dll添加到我的projet的参考中。 结果 :尝试从Global.asax行进行配置时没有编译错误但出现1错误:
protected void Application_Start(object sender, EventArgs e) { log4net.Config.XmlConfigurator.Configure(); }
这是错误:(见#Ref1)
有没有人成功使用Framework 4.0将SmtpAppender配置为C#VS.net Web应用程序?
覆盖成员时违反了继承安全规则:'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'。 覆盖方法的安全性可访问性必须与被覆盖的方法的安全性可访问性相匹配
我刚试过别的东西。 我打开了使用VS.net 2010转换的log4net应用程序的完整.sln,添加了一个与我的应用程序完全相同的Web项目,但在这种情况下,我可以调试Log4net库。 这是它失败的地方:
// If we could not find an alias
if (rep == null)
{
LogLog.Debug("DefaultRepositorySelector: Creating repository [" + repositoryName + "] using type [" + repositoryType + "]");
// Call the no arg constructor for the repositoryType
HERE -> rep = (ILoggerRepository)Activator.CreateInstance(repositoryType); <-- HERE
[...]
}
找到它!! 我已经阅读了这篇文章Log4Net和.NET 4.0 RC ,它只是解决它!
在我的第一篇文章(问题)中,在我试过的第3步,它说要替换AssemblyInfo.cs中的东西:
他说:“在AssemblyInfo.cs中,将部分安全性的部分修改为:”
(#)if (!NETCF && !NET_4_0)
//
// If log4net is strongly named it still allows partially trusted callers
//
[assembly: System.Security.AllowPartiallyTrustedCallers]
(#)endif
这不好!! 您必须删除“!NET_4_0”并用此行替换[assembly]:
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
SMTPAppender和FileAppender现在都适合我!
您仍然会在部分信任4.0网站下使用log4net v1.2.11获取此错误消息,例如:
<system.web>
<trust level="Medium" />
如果没有必要部分信任,请将其更改为:
<system.web>
<trust level="Full" />
停止错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.