2014-05-21 23 views
5

Ho il seguente aspetto personalizzato e ho provato ad applicarlo a livello di progetto e di classe. In tutti i casi, anche una divisione intenzionale per zero, il metodo OnException non viene mai chiamato. Che cosa sto facendo di sbagliato?Aspetto Postharp OnException non funzionante come previsto

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

Ho provato questa decorazione su una classe:

[AutoLogExceptionsAspect] 
public partial class App : Application 

e questo sul progetto:

[assembly: AutoLogExceptionsAspect] 
+0

L'override di GetExceptionType è ridondante, poiché cattura comunque l'eccezione. Mostraci come hai decorato la tua classe/progetto –

+0

@YuvalItzchakov, per favore vedi la domanda modificata. – ProfK

+0

Prova '[assembly: YourNamespace.AutoLogExceptionsAspect (AttributeTargetTypes =" YourNamespace. * ")]' –

risposta

1

IMHO AutoLogExceptionsAspect non è collegato a onException aspetto (o almeno è non obbligatorio).

Di solito quando l'eccezione (o altri attributi di "metodi") non vengono chiamati, è perché c'era un problema nella catena di generazione al momento della chiamata PostSharp.

Assicurati che Postsharp sia attivo e in esecuzione su macchine di generazione e che Postsharp sia abilitato nelle proprietà del progetto (ad esempio, nessuna opzione "SkipPostSharp" nelle proprietà sugli assiemi che richiede l'elaborazione di PostSharp). Se non gli attributi non verranno eseguiti.

+0

In qualche modo è andato bene, ma era un problema di costruzione. All'improvviso PostSharp ha prodotto un errore di compilazione nell'esecuzione di uno dei suoi strumenti e questo ha evidenziato un problema apparentemente non correlato che ho risolto. – ProfK

0

Se la licenza Postsharp non è valida o è scaduta, sta saltando il metodo OnException nella classe. L'aggiornamento di Postsharp con un numero di licenza valido ha risolto il problema.