将log4net包含在使用.net 4.0构建的.net Web应用程序中

时间:2010-07-27 14:20:21

标签: c# asp.net .net-4.0 log4net

我看到网上有很多很多关于这个的帖子,也是在stackoverflow中,但是我找不到任何方法来解决我的问题。我现在已经尝试了3件事,但一切都行不通:

  1. 我只是试图从log4net zip文件夹中获取log4net.dll,其中包含bin目录中的所有源代码。 结果:没有编译错误,但我的SmtpAppender只是不发送错误电子邮件。
  2. 所以,我从网上搜索,发现可以与log4net.dll编译的版本相关。哪个是奇怪的但是无论如何,我遇到了一个错误,我要求我为程序集生成一个强密钥,这就是我所做的和编译所以我发布了这个项目并将log4net.dll添加到我的projet的引用中。 结果:尝试从Global.asax行进行配置时没有编译错误,但出现1错误:

    protected void Application_Start(object sender, EventArgs e) {
        log4net.Config.XmlConfigurator.Configure();
    }
    

    这是错误:(见#Ref1)

  3. 所以,再次,我发现这个线程来自某个Ahmed Fouad,根据我的说法,他们希望工作得很好。 Here's the thread。我已经做了他说的所有事情,但我仍然遇到了同样的错误(#Ref1)。
  4. 是否有人使用Framework 4.0成功将SmtpAppender配置为C#VS.net Web应用程序?

    Ref1至

      

    覆盖成员时违反了继承安全规则:'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)'。覆盖方法的安全性可访问性必须与要覆盖的方法的安全性可访问性相匹配


    其他信息(评论#1)

    我刚试过别的东西。我打开了使用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
    
        [...]
    }
    

2 个答案:

答案 0 :(得分:5)

找到它!!我已经阅读了这篇文章Log4Net and .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现在对我来说都很好用!

答案 1 :(得分:4)

您仍会在部分信任4.0网站下使用log4net v1.2.11收到此错误消息,例如:

<system.web>
    <trust level="Medium" />

如果没有必要部分信任,请将其更改为:

<system.web>
    <trust level="Full" />

停止错误。