使用Postsharp在VS2012中编译c#项目时出错

使用Postsharp在VS2012中编译c#项目时出错,c#,nlog,postsharp,C#,Nlog,Postsharp,我目前正在进行一个项目,我们希望添加PostSharp功能 我已经设置了我的Postsharp属性 [Serializable] public class NLogTraceAttribute : OnMethodBoundaryAspect { private readonly string _logLevel; ILogger logger; public NLogTraceAttribute(string logLevel) { _logL

我目前正在进行一个项目,我们希望添加PostSharp功能

我已经设置了我的Postsharp属性

[Serializable]
public class NLogTraceAttribute : OnMethodBoundaryAspect
{
    private readonly string _logLevel;
    ILogger logger;

    public NLogTraceAttribute(string logLevel)
    {
        _logLevel = logLevel;

        logger = new Logger("TraceAttribute");
    }

    public override void OnEntry(MethodExecutionArgs args)
    {
        LogAction("Enter", args);
    }

    public override void OnExit(MethodExecutionArgs args)
    {
        LogAction("Leave", args);
    }

    private void LogAction(string action, MethodExecutionArgs args)
    {
        var argumentsInfo = args.GetArgumentsInfo();

        logger.Log(_logLevel, "{0}: {1}.{2}{3}", action, args.Method.DeclaringType.Name, args.Method.Name, argumentsInfo);
    }
}
试着把它当作

    [NLogTrace(NLogLevel.Debug)]
但是,在编译项目时,我遇到以下错误:

    Error   26  Cannot serialize the aspects: Type 'NLog.Logger' in Assembly 
    'NLog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c' 
    is not marked as serializable.. 
任何帮助都将不胜感激

[NonSerialized]
public Logger logger;

按照上面标记的方式声明记录器解决了我考虑使用PostSharp Diagnostics Toolkit()而不是编写自己的实现时遇到的问题。顺便说一句,它是开源的。你真的是说这是一个有效的解决方案,还是你只是在没有运行应用程序的情况下键入它?它无法工作,因为即使是官方文档也指出,任何初始化都不应该使用方面的构造函数。对此,有
RuntimeInitialize
方法。因此,在本例中,您应该在LogAction中包含NullPointerException,因为没有创建记录器。这对我将NLog添加到PostSharp的OnMethodBoundaryAspect中起到了作用——感谢大家的提醒!