升級到 .NET 4.5 後出現 iFrame 解析器錯誤
我們最近將我們所有的 WebForms 項目升級到 .NET 4.5,並且在載入帶有
iFrame元素的頁面時遇到了解析器問題。我們通過將iFramefrom轉換為HtmlGenericControl來糾正這個問題HtmlIframe。當我們在本地執行程式碼時,這已經糾正了所有解析器錯誤。當我們部署應用程序時,我們會收到以下錯誤消息:
解析器錯誤消息:基類包含欄位“frame”,但其類型(System.Web.UI.HtmlControls.HtmlIframe)與控制項類型(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容。**
當我部署舊程式碼時,
HtmlGenericControl錯誤消失了,這表明即使我們安裝了 .NET 4.5,伺服器仍在使用舊版本?我嘗試刪除並重新安裝 .NET,確保向 IIS 註冊 asp。
帶有 IIS 7.5 和 .NET 4.5 的 Windows 2008 R2
我們能夠解決轉換
<iframe id="iframe" runat="server" />到
<asp:HtmlIframe id="iframe" runat="server" />
基本問題是 ASP.NET 編譯器(將 ASPX 和 ASCX 文件編譯為 C# 或 VB 程式碼)從 Web 窗體 IFRAME 伺服器控制項生成的對象與 Web 窗體中與該控制項對應的變數類型之間不兼容後面的程式碼。IFRAME 伺服器控制項 (
<iframe id="frame" runat="server" />) 將被解析為特定類型的控制項。在 ASP.NET 4 中,IFRAME 伺服器控制項將是 HtmlGenericControl 控制項。在 ASP.NET 4.5 中,IFRAME 伺服器控制項將是 HtmlIframe 控制項。通過確保 web.config 文件中編譯元素上的 targetFramework 屬性與項目的 Target Framework 屬性一致並且與 IFRAME 伺服器控制項對應的變數與 ASP.NET 控制項的類型匹配,可以解決此問題編譯器會生成。
已在 Visual Studio 2013 中轉換為 .NET Framework 4.5 的 ASP.NET 4 項目將修改項目的 web.config 文件,以便編譯元素的 targetFramework 屬性的值為“4.5”(
<compilation targetFramework="4.5"/>)。這會導致 ASP.NET 編譯器將 IFRAME 伺服器控制項視為 HtmlIframe 控制項。如果控制項變數後面的 Web 窗體程式碼仍然是 HtmlGenericControl,這可能會導致問題。你看到的錯誤是這樣的:基類包含欄位“frame”,但其類型(System.Web.UI.HtmlControls.HtmlGenericControl)與控制項類型(System.Web.UI.HtmlControls.HtmlIframe)不兼容。
上一個錯誤的解決方法是更新IFRAME伺服器控制項對應的伺服器控制項變數的類型。您可以通過重新保存 Web 窗體 HTML 文件來執行此操作,這將導致重新生成設計器文件。據我所知(至少在 Visual Studio 2013 中)不需要更改控制項 ID。如果伺服器控制變數在程式碼隱藏文件中,則必須手動更新。
如果 web.config 文件中編譯元素的 targetFramework 屬性值為“4.0” (
<compilation targetFramework="4.0"/>),則變數背後的程式碼是 HtmlIframe 的 ASP.NET 4.5 項目將遇到類似但不同的問題。這會導致 ASP.NET 編譯器將 IFRAME 伺服器控制項視為 HtmlGenericControl 控制項。你看到的錯誤是這樣的:基類包含欄位“frame”,但其類型(System.Web.UI.HtmlControls.HtmlIframe)與控制項類型(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容。
修復上一個錯誤的方法是確保 web.config 編譯設置與您項目的 Target Framework 屬性一致。在這種情況下,web.config 中編譯元素的 targetFramework 屬性的值應為“4.5”。
<compilation targetFramework="4.5"/>注意:將 httpRuntime 元素的 targetFramework 屬性設置為 4.5 也會產生將編譯元素的 targetFramework 屬性設置為 4.5 的效果。有關詳細資訊,請參閱<https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/>。
注2:沒有
<asp:HtmlIframe>標籤。將標記前綴“asp”註冊到 System.Web.UI.HtmlControls 命名空間並不是使用 IFRAME 伺服器控制項所必需的。