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.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 に答える