升级到.NET 4.5后,iFrameparsing器错误
我们最近将所有WebForms项目升级到了.NET 4.5,并且在使用iFrame
元素加载页面时遇到了parsing器问题。 我们通过将HtmlGenericControl
的iFrame
转换为HtmlGenericControl
来纠正这个HtmlIframe
。 当我们在本地运行我们的代码时,这已经纠正了所有的分析器错误。
当我们部署应用程序,我们得到以下错误信息:
parsing器错误消息:基类包含字段“框架”,但其types(System.Web.UI.HtmlControls.HtmlIframe)与控件types(System.Web.UI.HtmlControls.HtmlGenericControl)不兼容。
当我用HtmlGenericControl
部署旧的代码时,错误消失,提示即使我们安装了.NET 4.5,服务器仍然使用旧版本?
我试过删除并重新安装.NET,确保向IIS注册asp。
Windows 2008 R2与IIS 7.5和.NET 4.5
基本问题是ASP.NET编译器(将ASPX和ASCX文件编译为C#或VB代码)从Web窗体IFRAME服务器控件生成的对象与Web窗体中与该控件相对应的variablestypes之间的不兼容后面的代码。 IFRAME服务器控件( <iframe id="frame" runat="server" />
)将被parsing为特定types的控件。 在ASP.NET 4中,IFRAME服务器控件将是HtmlGenericControl控件。 在ASP.NET 4.5中,IFRAME服务器控件将是一个HtmlIframe控件。
可以通过确保web.config文件中编译元素的targetFramework属性与您的项目的Target Framework属性一致,并确保与您的IFRAME服务器控件对应的variables与控件的types编译器会生成。
已在Visual Studio 2013中转换为.NET Framework 4.5的ASP.NET 4项目将修改项目的web.config文件,以便编译元素的targetFramework属性的值为“4.5”( <compilation targetFramework="4.5"/>
)。 这会导致ASP.NET编译器将IFRAME服务器控件视为HtmlIframe控件。 如果控件variables后面的Web窗体代码仍然是HtmlGenericControl,则会导致问题。 你看到的错误是这样的:
基类包含字段“框架”,但其types(System.Web.UI.HtmlControls.HtmlGenericControl)与控件types(System.Web.UI.HtmlControls.HtmlIframe)不兼容。
以前的错误的解决scheme是更新对应于IFRAME服务器控件的服务器控件variables的types。 您可以通过重新保存将重新生成devise器文件的Web窗体HTML文件来完成此操作。 据我所见(至less在Visual Studio 2013中)更改控件ID是没有必要的。 如果服务器控制variables位于文件后面的代码中,则必须手动更新。
如果web.config文件中的编译元素的targetFramework属性的值为“4.0”( <compilation targetFramework="4.0"/>
,则代码隐藏variables为HtmlIframe的ASP.NET 4.5项目将遇到类似但不同的问题。 <compilation targetFramework="4.0"/>
)。 这会导致ASP.NET编译器将IFRAME服务器控件视为HtmlGenericControl控件。 你看到的错误是这样的:
基类包含“框架”字段,但其types(System.Web.UI.HtmlControls.HtmlIframe)与控件types(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。 有关更多信息,请参阅http://blogs.msdn.com/b/webdev/archive/2012/11/19/all-about-httpruntime-targetframework.aspx 。
注2:没有<asp:HtmlIframe>
标签。 将标记前缀“asp”注册到System.Web.UI.HtmlControls命名空间不是使用IFRAME服务器控件所必需的。
您需要添加以下标记:
<asp:HtmlIframe>
并在devise器中将控件types更改为:
System.Web.UI.HtmlControls.HtmlIframe
在Web.config中添加以下内容:
<controls> <add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" assembly="System.Web"/> </controls>
这应该解决它。
我们能够解决转换问题
<iframe id="iframe" runat="server" />
至
<asp:HtmlIframe id="iframe" runat="server" />
检查你的configuration文件中是否有下一个设置。 还要确保它在发布之后。
<system.web> <httpRuntime targetFramework="4.5" /> <compilation debug="true" targetFramework="4.5"/> ... </system.web>
希望它应该帮助。
您可以将您的HTML元素保留为<iframe>
,并简单地修改您的.designer文件以将其types更改为
System.Web.UI.HtmlControls.HtmlIframe
进一步(或作为这里的答案的组合)。
如果你有更新的System.Web.UI.HtmlControls
的引用,我不相信它需要实际上将iframe
的标签更改为asp:HtmlIFrame
。
我更新了我的web.config,删除特定版本的标签前缀,并将其replace为:
<add tagPrefix="asp" namespace="System.Web.UI.HtmlControls" assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
清理并重build项目,并使用正确的HtmlIFrame
输出为我重新生成所有devise器标签。
我也面临这个问题,但只是我删除了这个用户控件和相同的名称添加新的用户控件,然后我的问题是固定的…..
<iframe id="logPanel" runat="server" scrolling="auto" src="">
看看devise器文件,并在存在问题的控件中replaceHtmlGenericControl的Htmliframe。
我的解决scheme是重命名IFrame并重build,devise器文件将相应地更新与正确的引用。