2012-10-30 98 views
3

我目前正在开发一个项目,我们希望添加PostSharp功能。使用Postharp编译VS2012中的c#项目时出现错误

我已经建立了我的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.. 

任何帮助,将不胜感激

+0

考虑使用PostSharp-诊断 - 工具包(问题http://www.sharpcrafters.com/blog/post/Configuring-PostSharp-Diagnostics- Toolkits.aspx)而不是编写自己的实现。顺便说一句,它是开源的。 –

回答

5
[NonSerialized] 
public Logger logger; 

声明如上述标记记录器已经解决了我有

+1

你确实在说这是工作解决方案吗?或者你只是在没有运行应用程序的情况下输入它?它不能工作,因为即使官方文档说,你不应该使用方面的构造函数进行初始化。这里有'RuntimeInitialize'方法。所以在这种情况下,你应该在LogAction中有NullPointerException,因为记录器没有被创建。 –

+0

这对我来说可以将NLog添加到我的PostSharp的OnMethodBoundaryAspect中 - 感谢您的支持! –

相关问题