使用Postsharp在VS2012中编译c#项目时出错
我目前正在进行一个项目,我们希望添加PostSharp功能 我已经设置了我的Postsharp属性使用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
[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中起到了作用——感谢大家的提醒!