2012年4月3日

ASP.NET MVC 4 Beta - Internet Application放到Windows Azure所遇到的問題

最近將開始寫Study4的網站,而因為沒有強大設計人力的支援下,想說先利用ASP.NET MVC預設的Internet Application樣板來修改,在編輯時期,Local模擬後,都沒有甚麼問題,於是就很放心的佈署上去了!然後就出現下面這個畫面。

image

這個畫面是ASP.NET MVC Internet Application預設的錯誤畫面,當有錯誤的時候,會導到這頁,代表著有錯誤,而這邊,我們就利用這篇所教的IntelliTrace的方式,來看看錯在哪邊,我們可以發現解析的時候發生錯誤,但老實說,還是找不到錯在哪邊…image

後來心一橫,直接把Error.cshtml 更名掉,並在Web.Config加上CustomErrors Mode =”off”,讓畫面顯示錯誤報告,如下圖,看到這,大家應該就恍然大悟了吧,沒錯,就是檔案存檔的編碼有問題!!

image

於是我使用NotePad++打開Index.cshtml檔案,發現是ANSI編碼!

image

但如果是其他檔案的話,卻是UTF-8。

image

小弟發現,_Layout.cshtml和index.cshtml是ANSI編碼,其他的檔案就是UTF-8編碼,而在本機上測試的時候,是不會有任何問題的,但如果發布到Windows Azure,就會出現

System.Web.HttpParseException,訊息為"¦" is not valid at the start of a code block.  Only identifiers, keywords, comments, "(" and "{" are valid.

其次,也會連帶的出現以下的例外訊息。

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException 訊息為 System.Dynamic.DynamicObject’ does not contain a definition for ‘Message’

所以解決辦法,就是利用NotePad++的編碼,並選擇轉換至UTF-8碼格式,就可以了。

image

後記

老實說,不知道這屬不屬於ASP.NET MVC 4 Beta的Bug,我後來有開ASP.NET MVC 3的專案來看,存檔的內容也是UTF-8,並非ANSI,畢竟對於英文語系的使用者來說,這是完全沒有甚麼影響的,但如果是我們亞洲語系的使用者,可能就會造成不便,所以這部份小弟在回報看看,希望正式版能改善=V=。

沒有留言:

張貼留言