我们正在将Web应用程序从.NET Framework 3.5迁移到4.5版本。在开发机器上,我们使用VS2012和运行Windows 7操作系统。在这个过程中,我们遇到了以下错误:
“基类包括字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型(System.Web.UI.HtmlControls.HtmlElement)不兼容。”
相应的HTML代码如下:
为了解决这个问题,我们按照此链接http://support.microsoft.com/kb/941824/en-us中给出的步骤进行操作。
实质上,我们只是剪切了HTML并将其粘贴回去...然后设计师代码被重新生成,如下所示。
这似乎是解决问题的逻辑方法,对一些机器也有效,但同样的修复会导致其他开发人员和特别是部署到生产 Web 服务器上的代码出现问题。请注意,我们在生产服务器上运行 Windows Server 2008 R2 Datacenter,并在机器上安装了 .Net Framework 4.5。更改后,我们收到以下错误消息:
“基类包括字段 'htmlTag',但其类型 (System.Web.UI.HtmlControls.HtmlElement) 与控件的类型 (System.Web.UI.HtmlControls.HtmlGenericControl) 不兼容。”
你可以看到错误消息与本帖中第一个错误消息完全相反。
那些现在出错的机器上,如果我们将控件类型保留为HTMLGenericControl,则错误就会消失。
我们尝试比较工作和不工作的机器上与 .net framework 相关的服务包,但我们真的没有注意到任何可能导致错误的东西。
这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与每个人协调解决其本地环境的方法。此外,我们不能使用更改提交此文件,因为它会破坏许多人,并且发布到生产将变得困难。
请帮助我们解决这个问题。
“基类包括字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型(System.Web.UI.HtmlControls.HtmlElement)不兼容。”
相应的HTML代码如下:
<html xmlns="http://www.w3.org/1999/xhtml" class="no-js" runat="server" id="htmlTag">
相应的设计师代码是(.cs.designer文件)
protected global::System.Web.UI.HtmlControls.HtmlGenericControl htmlTag;
完整的堆栈跟踪在此处...
System.Web.HttpParseException (0x80004005): 基类包括字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件的类型(System.Web.UI.HtmlControls.HtmlElement)不兼容。在System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration(ControlBuilder builder)中发生错误,在System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder builder, Boolean fInTemplate, Boolean topLevelControlInTemplate, PropertyEntry pse)中发生错误,在System.Web.Compilation.TemplateControlCodeDomTreeGenerator.BuildMiscClassMembers()中发生错误,在System.Web.Compilation.PageCodeDomTreeGenerator.BuildMiscClassMembers()中发生错误,在System.Web.Compilation.BaseCodeDomTreeGenerator.BuildSourceDataTree()中发生错误,在System.Web.Compilation.BaseCodeDomTreeGenerator.GetCodeDomTree(CodeDomProvider codeDomProvider, StringResourceBuilder stringResourceBuilder, VirtualPath virtualPath)中发生错误,在System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode(AssemblyBuilder assemblyBuilder)中发生错误,在System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider)中发生错误,在System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()中发生错误,在System.Web.Compilation.BuildProvidersCompiler.PerformBuild()中发生错误,在System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)中发生错误,在System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)中发生错误,在System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)中发生错误,在System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)中发生错误,在System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)中发生错误,在System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)中发生错误。为了解决这个问题,我们按照此链接http://support.microsoft.com/kb/941824/en-us中给出的步骤进行操作。
实质上,我们只是剪切了HTML并将其粘贴回去...然后设计师代码被重新生成,如下所示。
protected global::System.Web.UI.HtmlControls.HtmlElement htmlTag;
这似乎是解决问题的逻辑方法,对一些机器也有效,但同样的修复会导致其他开发人员和特别是部署到生产 Web 服务器上的代码出现问题。请注意,我们在生产服务器上运行 Windows Server 2008 R2 Datacenter,并在机器上安装了 .Net Framework 4.5。更改后,我们收到以下错误消息:
“基类包括字段 'htmlTag',但其类型 (System.Web.UI.HtmlControls.HtmlElement) 与控件的类型 (System.Web.UI.HtmlControls.HtmlGenericControl) 不兼容。”
你可以看到错误消息与本帖中第一个错误消息完全相反。
那些现在出错的机器上,如果我们将控件类型保留为HTMLGenericControl,则错误就会消失。
我们尝试比较工作和不工作的机器上与 .net framework 相关的服务包,但我们真的没有注意到任何可能导致错误的东西。
这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与每个人协调解决其本地环境的方法。此外,我们不能使用更改提交此文件,因为它会破坏许多人,并且发布到生产将变得困难。
请帮助我们解决这个问题。