我有以下自定义方面,并尝试在项目和类级别应用它。在所有情况下,即使故意除以零,也不会调用OnException
方法。我做错了什么?
[Serializable]
public class AutoLogExceptionsAspect : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
AutoLogExceptionEventSource.Log.AutoLogException(args.Exception.GetType().Name, args.Exception.Message, args.Exception.StackTrace);
args.FlowBehavior = FlowBehavior.Continue;
}
public override Type GetExceptionType(MethodBase targetMethod)
{
return typeof(Exception);
}
}
我在课堂上尝试过这种装饰:
[AutoLogExceptionsAspect]
public partial class App : Application
和项目中的这个:
[assembly: AutoLogExceptionsAspect]
答案 0 :(得分:1)
恕我直言AutoLogExceptionsAspect与onexception方面无关(或至少不是强制性的)。
通常在未调用Exception(或其他“方法”方面属性)时,这是因为在PostSharp调用时构建链中存在问题。
请确保Postsharp是否在构建计算机上启动并运行,并且在项目属性中启用了Postsharp(例如,在需要处理PostSharp的程序集的属性中没有“SkipPostSharp”开关)。如果不是属性将不会被执行。
答案 1 :(得分:0)
如果Postsharp许可证无效或已过期,它会在您的课程中跳过OnException方法。使用有效的许可证号更新Postsharp解决了我的问题。