2014-05-21 11 views
5

Mam następujący niestandardowy aspekt i próbowałem zastosować go na poziomie projektu i klasy. We wszystkich przypadkach, nawet celowe dzielenie przez zero, metoda OnException nigdy nie jest wywoływana. Co ja robię źle?Postsharp OnException Aspect nie działa zgodnie z oczekiwaniami.

[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); 
    } 
} 

Próbowałem tej dekoracji na klasy:

[AutoLogExceptionsAspect] 
public partial class App : Application 

i ten jeden temat projektu:

[assembly: AutoLogExceptionsAspect] 
+0

Nadpisanie GetExceptionType jest zbędne, ponieważ i tak wychwyci "wyjątek". Pokaż nam, jak udekorowałeś swoją klasę/projekt –

+0

@YuvalItzchakov, zobacz zmodyfikowane pytanie. – ProfK

+0

Wypróbuj '[assembly: YourNamespace.AutoLogExceptionsAspect (AttributeTargetTypes =" YourNamespace. * ")]' –

Odpowiedz

1

IMHO AutoLogExceptionsAspect nie jest powiązany z onException aspekcie (a przynajmniej jest nie jest obowiązkowe).

Zwykle, gdy wyjątek (lub inne atrybuty aspektów metod) nie są wywoływane, dzieje się tak, ponieważ wystąpił problem w łańcuchu kompilacji w czasie wywołania PostSharp.

Proszę się upewnić, czy Postsharp jest uruchomiony na maszynach budujących, a Postsharp jest włączony we właściwościach projektu (na przykład, nie ma przełącznika "SkipPostSharp" we właściwościach na złożeniach, które wymagają przetworzenia PostSharp). Jeśli nie, atrybuty nie zostaną wykonane.

+0

To jakoś się poprawiło, ale to był problem z budową. Nagle pewnego dnia PostSharp wygenerował błąd kompilacji, uruchamiając jedno z jego narzędzi, które uwidoczniło pozornie niezwiązany problem, który naprawiłem. – ProfK

0

Jeśli licencja Postsharp nie jest ważna lub wygasła, to pomija metodę OnException w klasie. Aktualizacja Postsharp z poprawnym numerem licencji rozwiązała mój problem.

Powiązane problemy