我们正在将我们的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):基类包含字段&#39; htmlTag&#39;,但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型不兼容( System.Web.UI.HtmlControls.HtmlElement)。 System.Web.Compilation.Base上的System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration(ControlBuilder构建器),System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder的System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder构建器,Boolean fInTemplate,Boolean topLevelControlInTemplate,PropertyEntry pse) ,布尔fInTemplate,布尔值topLevelControlInTemplate,PropertyEntry pse)位于System.Web.Complation.Bs上的System.Web.Compilation.CopDomTreeGenerator.BuildMiscClassMembers(),System.Web.Compilation.BaseCodeDomTreeGenerator.BuildMiscClassMembers() System.Web.Co上System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode(AssemblyBuilder assemblyBuilder)的.Compilation.BaseCodeDomTreeGenerator.GetCodeDomTree(CodeDomProvider codeDomProvider,StringResourceBuilder stringResourceBuilder,VirtualPath virtualPath)系统中System.Web.Compilation.BuildProvidersCompiler.PerformBuild()的System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()处的System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider)上的mpilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider)。 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert的System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildInPrecompile,Boolean throwIfNotFound,Boolean ensureIsUpToDate)中的Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) (HttpContext上下文,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)at Syste System.Web上的System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext上下文,String requestType,VirtualPath virtualPath,String physicalPath)中的m.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath,Type requiredBaseType,HttpContext context,Boolean allowCrossApp)。 System.Web.HttpApplication.ExecuteStep中的HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()(IExecutionStep step,Boolean&amp; completedSynchronously)错误方法:Void AddBuildProvider(System.Web.Compilation.BuildProvider)帮助链接:
要解决此问题,我们按照此链接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。以下是我们在更改后得到的错误
基类包括字段&#39; htmlTag&#39;但它的类型(System.Web.UI.HtmlControls.HtmlElement)与控件类型不兼容(System.Web.UI.HtmlControls.HtmlGenericControl)
您会看到错误消息与此帖子中的第一条错误消息正好相反
在那些现在出错的机器中,如果我们将控件的类型保留为HTMLGenericControl
,则错误就会消失
我们试图在工作的机器上比较.net框架相关的服务包与那些没有的工具包,我们真的没有注意到可能导致错误的任何东西
这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与每个团队协调解决当地环境的方法。更多的事情我们无法通过更改来签入此文件,因为它会为许多人打破并将其发布到生产中也很困难
你能帮我们解决这个问题吗
答案 0 :(得分:2)
最后我找到了问题的原因
不得不承认这是我的错误和一个令人尴尬的简单修复
默认情况下,当项目的目标框架修改为4.5时,它会更新web.config,如下所示
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>
首先我们没有意识到VS会在升级到4.5时修改web.config。其次,我们的Web.Config是一个大文件,即使修改了1行,它仍然会将整个文件显示为已修改。因此,除非我们手动明确地更改它,否则我们从不打算将文件签入源代码控制。因此,一些机器将targetFramework属性设置为4.5,而其他机器则没有。这解释了跨机器的不一致行为。我们可能需要按照visual studio进行自动编辑的方式格式化web.config,并检查源cnotrol以避免将来出现此问题
此致
希瓦