小编Siv*_*adi的帖子

将.NET Framework 3.5迁移到4.5时出错

我们正在将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">
Run Code Online (Sandbox Code Playgroud)

相应的设计师代码是(.cs.designer文件)

protected global::System.Web.UI.HtmlControls.HtmlGenericControl htmlTag;
Run Code Online (Sandbox Code Playgroud)

这里有完整的堆栈跟踪

System.Web.HttpParseException(0x80004005):基类包含字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlGenericControl)与控件类型(System.Web.UI.HtmlControls)不兼容. HtmlElement元素).在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.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(IExecutionStep step,Boolean&completedSynchronously)中的HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()错误方法:Void AddBuildProvider(System.Web.Compilation.BuildProvider)帮助链接:

要解决此问题,我们按照此链接中给出的步骤进行操作http://support.microsoft.com/kb/941824/en-us

本质上我们只是剪切HTML并将其粘贴回来..设计器代码重新生成如下

protected global::System.Web.UI.HtmlControls.HtmlElement htmlTag;
Run Code Online (Sandbox Code Playgroud)

这看起来是修复问题的合理方法,它也适用于少数几台机器,但同样的修复程序破坏了其他开发人员机器上的代码,特别是部署到我们的生产Web服务器的代码.请注意,我们在生产服务器上运行Windows Server 2008 R2 Datacenter,并在计算机上安装了.Net Framework 4.5.以下是我们在更改后得到的错误

基类包含字段'htmlTag',但其类型(System.Web.UI.HtmlControls.HtmlElement)与控件类型不兼容(System.Web.UI.HtmlControls.HtmlGenericControl)

您会看到错误消息与此帖子中的第一条错误消息正好相反

在那些现在出错的机器中,如果我们只是将控件的类型留给HTMLGenericControl错误消失了

我们试图在工作的机器上比较.net框架相关的服务包与那些没有的机器,我们真的没有注意到可能导致错误的任何东西

这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与他们每个人就修复当地环境的方式进行协调.更重要的是,我们无法通过更改来检入此文件,因为它会为许多人打破并将其发布到生产中也很困难 …

.net asp.net

6
推荐指数
1
解决办法
3153
查看次数

标签 统计

.net ×1

asp.net ×1