2016-05-19 12 views
0

Ich habe ein Problem mit PostSharp, die kurz gesagt werden kann als "einige Aspekte nicht feuern und nicht im PostSharp Explorer angezeigt werden".PostSharp Aspekt nicht kompilieren und feuern

enter image description here

Wie auf einem Screenshot zwei Aspekte von Authorization Namensraum zu sehen war, die von MethodInterceptorAspect vererbt wird in Postsharp Explorer und zwei neuen Aspekten von Exceptionhandling Namensraum dargestellt werden, die von OnExceptionAspect abgeleitet ist, ist es nicht.

Unten ist ein Code von einem von ihnen: ein "Standard" Aspekt von Handbuch gemacht, fast das gleiche wie das Arbeiten von Aspets, außer es stammt von einer anderen Basisklasse. Ich habe versucht, das Problem zu identifizieren, verschiedene Code-Teile zu kommentieren, aber es hat nicht geholfen.

[Serializable] 
[AttributeUsage(AttributeTargets.All)] 
public class HandleExceptionAttribute : OnExceptionAspect 
{ 
    /// <summary> 
    /// Method executed <b>after</b> the body of methods to which this aspect is applied, 
    ///    in case that the method resulted with an exception (i.e., in a <c>catch</c> block). 
    /// </summary> 
    /// <param name="args">Advice arguments.</param> 
    public override void OnException(MethodExecutionArgs args) 
    { 
     // some exception handling code 
    } 
} 

Außerdem habe ich nur einen einfachen Aspekt rechts von der sample und es auch nicht in Postsharp Explorer angezeigt.

Frage

Die Frage ist also: warum Aspekte kompilieren und Feuer nicht?

+1

Der PostSharp-Explorer zeigt keine Aspekte an, die nicht auf ein Ziel angewendet werden (z. B. eine Methode). Was bedeutet es, dass "Aspekte nicht kompilieren und feuern"? Gibt es Build-Warnungen oder Fehler? Bedeutet es, dass Sie eine Methode mit HandleExceptionAttribute eingerichtet haben und wenn die Methode eine Ausnahme auslöst, wird ein Haltepunkt innerhalb der OnException-Methode nicht getroffen? –

+0

@JakubLinhart Ja, du hast Recht.Aspekte werden auf Methoden und Klassen angewendet, aber nicht im Postsharp Explorer angezeigt, und Breakpoints in Schlüsselmethoden unterbrechen das Debugging nicht. Ich wusste nicht, dass ohne Verwendung von Aspekten nicht im Explorer angezeigt (außerdem in meinem Fall wurden sie angewendet), so dass ich dachte, dass sie nicht in IL-Code gewebt wurden. Das habe ich unter "nicht kompilieren" erwähnt. –

Antwort

0

Unswering meine eigene Frage/Frage ist aktualisiert

Es scheint, es ist ein Fehler von Postsharp ist oder vielleicht ein Konflikt zwischen Postsharp, ReSharper und Visual Studio.

Nach appling eins von neuen Aspekten auf abstrakte Methode (vorher Aspekt war appliet auf Klassenebene) Ich habe einen Buildfehler über 'Inkompatibilität'. Dann habe ich die abstrakte Methode virtuell und das Projekt erfolgreich kompiliert. Und Resharper Explorer gezeigt beide neue Aspekte mit all ihren Auswirkungen. Um es deutlich zu machen, machte ich 'Änderungen rückgängig machen' und wollte meine Aktionen wiederholen, aber diesmal verschwanden alle Aspekte im PostSharp Explorer, als ob sie überhaupt nicht angewendet würden (während sie immer noch etwa 300 Mal angewendet wurden) und ReSharper hob alle Aspekte hervor als bekannte Typen.

Nach dem Aussetzen von ReSharper, dem Löschen der Lösung, dem Neustart der VisualStudio- und Neuerstellungslösung erschienen drei Aspekte im PostSharp-Explorer und der vierte erschien, nachdem PostSharp erneut auf das Projekt angewendet wurde, bei dem dieser Aspekt verwendet wurde.

Also, wenn Ihr Aspekt nicht feuern - überprüfen Sie Ihre PostSharp-Setup in Projekten, die Aspets verwenden.

Verwandte Fragen und Antworten:

Dank @Jakub zur Führung Kommentar!