我们正在将 Web 应用程序从 .NET Framework 3.5 迁移到 4.5
在我们的开发机器上,我们使用 VS2012 并运行 Windows 7 操作系统
在这个过程中我们得到了如下错误
基类包含字段“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. Html 元素)。在 System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration(ControlBuilder 生成器) 在 System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder 生成器,布尔 fInTemplate,布尔 topLevelControlInTemplate,PropertyEntry pse) 在 System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder 生成器) 、布尔 fInTemplate、布尔 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 .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,布尔noBuild,布尔allowCrossApp,布尔allowBuildInPrecompile,布尔 throwIfNotFound,布尔ensureIsUpToDate)在System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext上下文,VirtualPath virtualPath,布尔noBuild,布尔allowCrossApp,布尔allowBuildInPrecomp伊莱,Boolean throwIfNotFound,Boolean EnsureIsUpToDate)在System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath,HttpContext上下文,布尔值allowCrossApp,布尔值 throwIfNotFound)在System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath,类型requiredBaseType,HttpContext上下文,布尔值allowCrossApp)在System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext上下文,字符串requestType,VirtualPath virtualPath,字符串物理路径)在System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()在System.Web .HttpApplication.ExecuteStep(IExecutionStep step, Boolean&completedSynchronously) 错误方法:Void AddBuildProvider(System.Web.Compilation.BuildProvider) 帮助链接:
为了解决此问题,我们按照此链接中给出的步骤进行操作http://support.microsoft.com/kb/941824/en-us 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 框架相关服务包,但我们确实没有注意到任何可能导致错误的内容
这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与每个人协调修复当地环境的方法。此外,我们无法签入此文件的更改,因为它会对很多人造成破坏,并且将其发布到生产中也将很困难
您能帮我们解决这个问题吗