5

环境

  • 视窗 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 应用程序
  • 视觉工作室 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,版本=1.2.11.0,文化=中性,PublicKeyToken=669e0ddf0bb1aa2a”中键入“log4net.Core.LogImpl”未标记为可序列化。

我怎样才能使log4net.Core.LogImpl序列化,以便我可以编译这个解决方案?

4

1 回答 1

11

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

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

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

于 2013-04-26T15:15:47.070 回答