2010-09-07 54 views
2

我正在研究一個相當大的Silverlight 4應用程序(1個解決方案中的42個項目),並且我正在處理一個非常奇怪的問題。Silverlight 4應用程序在發佈版本中顯示空白頁面

該應用程序在調試版本中工作正常,甚至在發佈版本中,它也會在附帶調試器(F5)的情況下運行,但是如果運行時未經調試,Silverlight xap加載並僅顯示空白頁面。

我正在處理Application_UnhandledException,它不會觸發,因此幾乎不可能從它獲取任何有用的信息,特別是因爲我無法用附加的調試器重現此行爲。

調試器連接時可能會導致此問題的運行時有什麼不同?

編輯:我還應該補充說,調試版本也運行時沒有附加調試器。

+0

這是一個OOB應用程序嗎? – 2010-09-07 03:21:25

+0

不,它在瀏覽器 – Andronicus 2010-09-07 09:44:29

回答

2

事實證明,問題是發佈版本會執行一些優化來改變調用程序集。

我們使用反射在IoC容器中註冊類型,並在調試Assembly.GetCallingAssembly()。GetTypes()總是返回預期的程序集。但在發佈模式下,調用程序集是生成的匿名託管DynamicMethods程序集,因此我們的類型未在IoC容器中註冊,並且應用程序在發佈模式下崩潰。

解決的辦法是使用this.GetType()。Assembly來代替。

問題的關鍵在於當從IoC容器拋出異常時,Silverlight僅顯示空白頁面,因此很難確定失敗的原因。當然有一些方法可以改變這種行爲?

+0

+1。很好的發現和跟進。這個問題/答案肯定會對將來遇到問題的其他人很有用。 – 2010-09-08 02:09:34

1

IIS部署空白頁的常見原因是缺少MIME TYPES定義。 根據其種類Silverlight應用程序之一必須添加一個或多個以下類型:

的.xap格式application/x-Silverlight的應用 的.xaml應用/ XAML + XML 名.xbap應用程序/ x-MS- xbap