2009-11-11 83 views
0

HI,空引用異常項目

我使用PostSharp登錄我的應用程序組件的入口和出口的每一個方法。該組件在GAC中進行了強有力的命名,版本和註冊。

然後,它由2個託管在IIS內獨立虛擬目錄中的Web服務項目共享。當攔截器的OnEntry/OnExit方法被WebServiceProject1調用時,它工作正常,但是當它們被WebServiceProject2調用時,傳遞給攔截器的MethodExecutionEventArgs.Method值似乎爲空,我得到一個NullReferenceException。

如果您重新啓動IIS並以WebServiceProject2,WebServiceProject1的順序調用Web服務項目,那麼再次調用第一個工程,另一個以同樣的方式拋出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大會,使web服務項目流失的\ 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跑了正常,我看不出有任何理由的方法不通過。你有沒有嘗試在Reflector中看到會發生什麼?

-gael

+0

我在Postsharp論壇上提出這個問題,附上一個簡單的例子。 http://www.postsharp.org/forum/postsharp-laos/null-reference-exception-methodexecutioneventargs-method-t994.html我會將其添加到跟蹤器。 – 2009-11-12 08:14:58

+0

我已將問題添加到螳螂 - ID0000415。謝謝你的幫助。讓我知道是否有任何事情可以幫助我...... – 2009-11-12 08:19:14