我得到了“;无法序列化方面:类型';log4net.Core.LogImpl';在组装';log4ne

本文关键字:Core log4net LogImpl 类型 log4ne 方面 序列化 | 更新日期: 2023-09-27 18:10:58

环境

  • Windows 7 x64
  • PostSharp 2.1.7.30已安装
  • PostSharp 2.1.7.29(从PostSharp安装目录检索到的引用(
  • log4net 1.2.11.0(从log4net二进制文件下载的net'2.0'release目录检索到的引用(
  • 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);
    }
}

编译错误

无法序列化方面:程序集"log4net,Version=1.2.11.0,Culture=neutral,PublicKeyToken=669e0ddf0bb1aa2a"中的类型"log4net.Core.LogImpl"未标记为可序列化。

如何使log4net.Core.LogImpl可序列化,以便编译此解决方案

我得到了“;无法序列化方面:类型';log4net.Core.LogImpl';在组装';log4ne

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

[NonSerialized]
ILog _logger = LogManager.GetLogger("MethodBoundaryAspect");

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