我得到"无法序列化方面:在程序集'log4net ...'中输入'log4net.Core.LogImpl'" - 我可以将它设置为可序列化吗?

Mik*_*oud 5 .net c# log4net postsharp

环境

  • Windows 7 x64
  • 安装PostSharp 2.1.7.30
  • PostSharp 2.1.7.29 (从PostSharp安装目录中检索的引用)
  • log4net 1.2.11.0 (从net\2.0\releaselog4net二进制文件下载目录中检索引用)
  • ASP.NET 2.0应用程序
  • Visual Studio 2010 SP1

方面

[Serializable]
public class MethodBoundaryAspect : PostSharp.Aspects.OnMethodBoundaryAspect
{
    ILog _logger = LogManager.GetLogger("MethodBoundaryAspect");

    public override void OnEntry(PostSharp.Aspects.MethodExecutionArgs args)
    {
        _logger.DebugFormat("The user {0} entered the method {1} at {2}.",
            HttpContext.Current.Profile.UserName,
            args.Method.Name,
            DateTime.Now);

        base.OnEntry(args);
    }

    public override void OnExit(PostSharp.Aspects.MethodExecutionArgs args)
    {
        _logger.DebugFormat("The user {0} exited the method {1} at {2}.",
            HttpContext.Current.Profile.UserName,
            args.Method.Name,
            DateTime.Now);

        base.OnExit(args);
    }

    public override void OnException(PostSharp.Aspects.MethodExecutionArgs args)
    {
        _logger.DebugFormat("The user {0} was executing the method {1} when an unhandled exception occurred at {2}.{3}{4}",
            HttpContext.Current.Profile.UserName,
            args.Method.Name,
            DateTime.Now,
            Environment.NewLine,
            args.Exception.ToString());

        base.OnException(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译错误

无法序列方面:键入"log4net.Core.LogImpl"在大会"log4net的,版本= 1.2.11.0,文化=中性公钥= 669e0ddf0bb1aa2a"未标记为可序列.

如何进行log4net.Core.LogImpl序列化以便我可以编译此解决方案?

Mik*_*oud 11

根据Grant和mtsiakiris的评论,我通过[NonSerialized]在字段中添加属性来解决这个问题,如下所示:

[NonSerialized]
ILog _logger = LogManager.GetLogger("MethodBoundaryAspect");
Run Code Online (Sandbox Code Playgroud)

然后在序列化期间忽略它.发生这种情况的原因是因为PostSharp需要在IL生成期间序列化该属性.