2009-11-11 1 views
0

HI, 내 응용 프로그램 어셈블리에있는 모든 방법 입구와 출구를 기록 할 PostSharp를 사용하고null 참조 예외가

프로젝트. 이 어셈블리는 GAC에 강력한 버전이 지정되고 등록되어 있습니다.

그런 다음 IIS 내부의 별도 가상 디렉터리에서 호스팅되는 2 개의 웹 서비스 프로젝트에서 공유됩니다. 인터셉터의 OnEntry/OnExit 메서드가 WebServiceProject1에 의해 호출되면 제대로 작동하지만 WebServiceProject2에 의해 호출 될 때 인터셉터에 전달 된 MethodExecutionEventArgs.Method 값이 null 인 것으로 보이고 NullReferenceException이 발생합니다.

IIS를 다시 시작하고 WebServiceProject2, WebServiceProject1 순서로 웹 서비스 프로젝트를 호출 한 다음 첫 번째 호출은 다시 작동하고 다른 하나는 같은 방식으로 NullReferenceException을 발생시킵니다. 코드는 다음과 같습니다

[Serializable] 
[Log(AttributeExclude = true)] 
[AttributeUsage(AttributeTargets.All)] 
public sealed class LogAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { 
    IoC.Resolve<ILogger>().WriteMethodEntry(eventArgs.Method, eventArgs.GetReadOnlyArgumentArray()); 
    } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { 
    IoC.Resolve<ILogger>().WriteMethodExit(eventArgs.Method, eventArgs.ReturnValue); 
    } 
} 

흥미롭게도, 내가 GAC에서 어셈블리를 제거 할 경우 웹 서비스 프로젝트의 \ bin 하위 디렉토리 복사본을 실행, 그것을 잘 작동합니다. 응용 프로그램의 다른 부분이 GAC에있는 어셈블리에 의존하기 때문에이 작업을 수행하고 싶지는 않지만 다른 위치에 동일한 DLL의 다른 버전이 많이 필요하지는 않습니다.

여기에 설명 된 문제와 비슷합니다 : http://generatedbyatool.net/content/post/2009/07/27/PostSharp-Bug-or-How-To-Recycle-Your-Own-App-Pool.aspx하지만 분명히 다른 점이 있습니다.

누구나 아이디어 나 조언을 얻었습니까? 오늘 이것을 증명하기 위해 독립형 응용 프로그램을 만들려고합니다.

Stoo

답변

0

당신은 http://www.postsharp.org/tracker이 문제를보고시겠습니까?

처리 할 어셈블리가 GAC에있는 경우 알려진 문제점이 있습니다. 조립품은 PostSharp가 처리 할 때 GAC에 있어야합니다 (동일한 버전 번호 인 경우 이전 버전조차도). 빌드 전 단계에서 제거해야합니다.

그러나 PostSharp가 제대로 실행되면 메서드가 전달되지 않는 이유가 없습니다. 반사경에서 어떤 일이 일어나는지 보려고 했습니까?

- 게일

+0

간단한 예제를 첨부하여 Postsharp 포럼에서이를 제기했습니다. http://www.postsharp.org/forum/postsharp-laos/null-reference-exception-methodexecutioneventargs-method-t994.html 추적기에 추가 할 것입니다. –

+0

Mantis - ID0000415에 문제를 추가했습니다. 당신의 도움을 주셔서 감사합니다. 내가 도울 수있는 일이 있다면 알려줘. –