過去的一年裡,我們發現和修補了大家報告遇上的幾個ASP.NET 2.0編譯缺陷。
引發這些缺陷的原因有多個,但根本原因通常跟項目的結構有關,這些項目有特別的跨頁面的循環相依性。這些缺陷往往在系統上發生大規模的檔案變化時(譬如,一個抗病毒程式同時更新很多檔案上的所有時間戳記)會被觸發。
出錯資訊的例子:
下面這些出錯資訊,是你遇上這些編譯問題時,你也許看到的運行時異常類型的例子:
Unable to cast object of type '
ASP.masterpage
_master' to type '
ASP.masterpage
_master'.
(無法將
ASP.masterpage
_master類型的對象轉換成
ASP.masterpage
_master類型)
或者:
Could not load file or assembly 'App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
(無法裝載檔案或程式集“App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”或它的依賴向。系統找不到指定的檔案。)
或者:
Compiler Error Message: CS0006: Metadata file 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET Files\cms.web\44e73607\b028acb3\App_global.asax.fakktchx.dll' could not be found
(編譯錯誤資訊:CS0006:找不到中繼資料檔案“C:\WINDOWS\Microsoft.NET\Framework\v2.0. 50727\Temporary
ASP.NET Files\cms.web\44e73607\b028acb3\App_global.asax.fakktchx. dll”。)
或者:
System.InvalidOperationException: The resource class for this page was not found. Please check if the resource file exists and try again
(System.InvalidOperationException: 找不到當前頁面的資源類。請檢查資源檔確實存在,然後再試。)
這些問題的臨時解決方案:
如果你有一個應用開始拋出上面這些錯誤中的某一個時,你通常可以馬上施用一個臨時解決方案,開啟你應用的web.config檔案,將 <compilation> 節的 batch 屬性設定成false:
<configuration>
<system.web>
<compilation debug="false" batch="false"></compilation>
</system.web>
</configuration>
這告訴ASP.NET把單個的 .aspx/.ascx 檔案動態編譯成單獨的程式集,這會避免觸發異常的循環參考的問題。
你也可以使用下列步驟,刪去“Temporary ASP.NET Files”緩衝裡的檔案,來臨時解決這個問題:
- 點擊Windows開始按鈕,點擊運行,輸入 iisreset /stop,然後點擊OK。
- 開啟 驅動字母: WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 目錄。
- 刪除第二步裡你找出的目錄裡的所有檔案和所有檔案夾。
- 點擊開始,點擊運行,輸入 iisreset /start,然後點擊OK。
你可以在Microsoft KB文章 #934839 (機器翻譯的中文版)裡找到這些臨時方案的細節。
這些問題的QFE HotFix補丁現在可以下載了:
【譯註:QFE=Quick Fix Engineering,快速修複工程】
作為上面施用設定檔臨時方案的替代方案,你現在也可以下載和施用微軟的一個QFE HotFix 補丁,該補丁修複了我們看到別人報告的編譯問題。
這個編譯問題的QFE HotFix補丁的直接下載連結在這裡。你可以在這裡的這個網頁上找到其他常見的Visual Studio 和.NET 架構 QFE HotFixes。
重要注意事項:有不少人有時問我,他們是否應該主動安裝QFE HotFixes(在他們遇上問題之前)。我總是建議別這麼做,因為QFE hotfixes只經過有針對性的測試以確認解決了一個特定的問題,但並不經過整個產品的end to end sign-off (從頭至尾,每一步都有簽名同意,沒問題才允許存取)。因此,我建議你只在你遇上上面這些針對性的問題時,你才施用它。
聯絡微軟產品支援:
如果你在安裝補丁時有什麼問題,或在安裝後你還看到編譯問題的話,你需要聯絡微軟產品支援,他們可以幫你進一步調試問題。微軟產品支援的電話是免費的,假如是針對產品的缺陷的話(無論是QFE HotFix請求還是你遇上的產品缺陷)。你可以在這個網頁上找到如何聯絡微軟產品支援的細節(該網頁允許你按國家來查詢本地電話號碼)。
Visual Studio的大多數版本帶有免費的產品支援券(product support ticket)(譬如,VS Pro with MSDN Premium每個訂閱都有4個支援券)。你可以使用這些支援券得到 .NET 或 Visual Studio方面的協助(譬如:幫你尋找你自己編碼中的缺陷或效能問題,或者學習如何使用架構或 IDE中的某個特性)。
微軟產品支援裡有些非常,非常優異的工程師,如果你有問題的話,與他們合作將是非常愉快的事情。下面是些我強烈建議你訂閱的 .NET 架構/ Visual Studio空間裡的精彩部落格:
- Tess: http://blogs.msdn.com/tess/
- Doug: http://blogs.msdn.com/dougste/
- Carlo: http://blogs.msdn.com/carloc/
- Rahul: http://blogs.msdn.com/rahulso/
- Jerry: http://blogs.msdn.com/jorman/
- Johan: http://blogs.msdn.com/johan/
- Todd: http://blogs.msdn.com/toddca/
如果你遇上你無法解決的問題,或者在生產性應用中遇上你需要急救的問題,給微軟產品支援打個電話,你會遇上象上面列出的名單裡的人,給你連上一個調試器,幫你診斷出問題所在。
謝謝
【原文地址】Public Hotfix Patch Available for ASP.NET Compilation Issues
【原文發表日期】 Wednesday, April 11, 2007 10:39 PM
過去的一年裡,我們發現和修補了大家報告遇上的幾個ASP.NET 2.0編譯缺陷。
引發這些缺陷的原因有多個,但根本原因通常跟項目的結構有關,這些項目有特別的跨頁面的循環相依性。這些缺陷往往在系統上發生大規模的檔案變化時(譬如,一個抗病毒程式同時更新很多檔案上的所有時間戳記)會被觸發。
出錯資訊的例子:
下面這些出錯資訊,是你遇上這些編譯問題時,你也許看到的運行時異常類型的例子:
Unable to cast object of type '
ASP.masterpage
_master' to type '
ASP.masterpage
_master'.
(無法將
ASP.masterpage
_master類型的對象轉換成
ASP.masterpage
_master類型)
或者:
Could not load file or assembly 'App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
(無法裝載檔案或程式集“App_Web_e9dbmaj, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”或它的依賴向。系統找不到指定的檔案。)
或者:
Compiler Error Message: CS0006: Metadata file 'C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary
ASP.NET Files\cms.web\44e73607\b028acb3\App_global.asax.fakktchx.dll' could not be found
(編譯錯誤資訊:CS0006:找不到中繼資料檔案“C:\WINDOWS\Microsoft.NET\Framework\v2.0. 50727\Temporary
ASP.NET Files\cms.web\44e73607\b028acb3\App_global.asax.fakktchx. dll”。)
或者:
System.InvalidOperationException: The resource class for this page was not found. Please check if the resource file exists and try again
(System.InvalidOperationException: 找不到當前頁面的資源類。請檢查資源檔確實存在,然後再試。)
這些問題的臨時解決方案:
如果你有一個應用開始拋出上面這些錯誤中的某一個時,你通常可以馬上施用一個臨時解決方案,開啟你應用的web.config檔案,將 <compilation> 節的 batch 屬性設定成false:
<configuration>
<system.web>
<compilation debug="false" batch="false"></compilation>
</system.web>
</configuration>
這告訴ASP.NET把單個的 .aspx/.ascx 檔案動態編譯成單獨的程式集,這會避免觸發異常的循環參考的問題。
你也可以使用下列步驟,刪去“Temporary ASP.NET Files”緩衝裡的檔案,來臨時解決這個問題:
- 點擊Windows開始按鈕,點擊運行,輸入 iisreset /stop,然後點擊OK。
- 開啟 驅動字母: WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 目錄。
- 刪除第二步裡你找出的目錄裡的所有檔案和所有檔案夾。
- 點擊開始,點擊運行,輸入 iisreset /start,然後點擊OK。
你可以在Microsoft KB文章 #934839 (機器翻譯的中文版)裡找到這些臨時方案的細節。
這些問題的QFE HotFix補丁現在可以下載了:
【譯註:QFE=Quick Fix Engineering,快速修複工程】
作為上面施用設定檔臨時方案的替代方案,你現在也可以下載和施用微軟的一個QFE HotFix 補丁,該補丁修複了我們看到別人報告的編譯問題。
這個編譯問題的QFE HotFix補丁的直接下載連結在這裡。你可以在這裡的這個網頁上找到其他常見的Visual Studio 和.NET 架構 QFE HotFixes。
重要注意事項:有不少人有時問我,他們是否應該主動安裝QFE HotFixes(在他們遇上問題之前)。我總是建議別這麼做,因為QFE hotfixes只經過有針對性的測試以確認解決了一個特定的問題,但並不經過整個產品的end to end sign-off (從頭至尾,每一步都有簽名同意,沒問題才允許存取)。因此,我建議你只在你遇上上面這些針對性的問題時,你才施用它。
聯絡微軟產品支援:
如果你在安裝補丁時有什麼問題,或在安裝後你還看到編譯問題的話,你需要聯絡微軟產品支援,他們可以幫你進一步調試問題。微軟產品支援的電話是免費的,假如是針對產品的缺陷的話(無論是QFE HotFix請求還是你遇上的產品缺陷)。你可以在這個網頁上找到如何聯絡微軟產品支援的細節(該網頁允許你按國家來查詢本地電話號碼)。
Visual Studio的大多數版本帶有免費的產品支援券(product support ticket)(譬如,VS Pro with MSDN Premium每個訂閱都有4個支援券)。你可以使用這些支援券得到 .NET 或 Visual Studio方面的協助(譬如:幫你尋找你自己編碼中的缺陷或效能問題,或者學習如何使用架構或 IDE中的某個特性)。
微軟產品支援裡有些非常,非常優異的工程師,如果你有問題的話,與他們合作將是非常愉快的事情。下面是些我強烈建議你訂閱的 .NET 架構/ Visual Studio空間裡的精彩部落格:
- Tess: http://blogs.msdn.com/tess/
- Doug: http://blogs.msdn.com/dougste/
- Carlo: http://blogs.msdn.com/carloc/
- Rahul: http://blogs.msdn.com/rahulso/
- Jerry: http://blogs.msdn.com/jorman/
- Johan: http://blogs.msdn.com/johan/
- Todd: http://blogs.msdn.com/toddca/
如果你遇上你無法解決的問題,或者在生產性應用中遇上你需要急救的問題,給微軟產品支援打個電話,你會遇上象上面列出的名單裡的人,給你連上一個調試器,幫你診斷出問題所在。