2014-05-21 1 views
5

다음 사용자 정의 부분이 있으며 프로젝트 및 클래스 수준에서 적용 해 보았습니다. 모든 경우에 의도적 인 0으로 나누기조차도 OnException 메서드는 호출되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Postsharp OnException Aspect가 예상대로 작동하지 않습니다.

[AutoLogExceptionsAspect] 
public partial class App : Application 

프로젝트에이 하나 :

[assembly: AutoLogExceptionsAspect] 
+0

GetExceptionType 재정의는 중복됩니다. 어쨌든 '예외'를 ​​잡아낼 수 있습니다. 귀하의 클래스/프로젝트를 어떻게 장식했는지 보여주십시오 –

+0

@YuvalItzchakov, 수정 된 질문을 참조하십시오. – ProfK

+0

시도하십시오 [assembly : YourNamespace.AutoLogExceptionsAspect (AttributeTargetTypes = "YourNamespace. *")]' –

답변

1

이럴 AutoLogExceptionsAspect이 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); 
    } 
} 

나는 클래스에이 장식을 시도 의무가 아닌).

일반적으로 Exception (또는 다른 "메서드"aspect 속성)이 호출되지 않으면 PostSharp 호출 시간에 빌드 체인에 문제가 있었기 때문입니다.

빌드 머신에서 포스트 샤프가 실행 중인지 확인하고 프로젝트 속성에서 포스트 샤프가 활성화되어 있는지 확인하십시오 (예 : 포스트 샤프를 처리해야하는 어셈블리의 속성에서 "SkipPostSharp"스위치가 없음). 그렇지 않으면 속성이 실행되지 않습니다.

+0

어쨌든 바로 그 자체가되었지만, 빌드 시간 문제였습니다. 갑자기 PostSharp가 도구 중 하나를 실행하여 빌드 오류를 발생 시켰고, 이는 내가 고쳐 놓은 겉으로는 무관 한 문제를 강조 표시했습니다. – ProfK

0

Postsharp 라이센스가 유효하지 않거나 만료 된 경우 클래스의 OnException 메소드를 건너 뜁니다. 유효한 라이센스 번호로 Postsharp를 업데이트하면 내 문제가 해결됩니다.