加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:49:18 所属栏目:asp.Net 来源:网络整理
导读:我们正在将Web应用程序从.NET framework 3.5迁移到4.5 在我们的开发机器上,我们使用VS2012并运行Windows 7操作系统 在这个过程中,我们得到以下错误 The base class includes the field ‘htmlTag’,but its type (System.Web.UI.HtmlControls.HtmlGenericCon
我们正在将Web应用程序从.NET framework 3.5迁移到4.5

在我们的开发机器上,我们使用VS2012并运行Windows 7操作系统

在这个过程中,我们得到以下错误

The base class includes the field ‘htmlTag’,but its type (System.Web.UI.HtmlControls.HtmlGenericControl) is not compatible with the type of control (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): The base class includes the field ‘htmlTag’,but its type (System.Web.UI.HtmlControls.HtmlGenericControl) is not compatible with the type of control (System.Web.UI.HtmlControls.HtmlElement). at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildFieldDeclaration(ControlBuilder builder) at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder builder,Boolean fInTemplate,Boolean topLevelControlInTemplate,PropertyEntry pse) at System.Web.Compilation.BaseTemplateCodeDomTreeGenerator.BuildSourceDataTreeFromBuilder(ControlBuilder builder,PropertyEntry pse) at System.Web.Compilation.TemplateControlCodeDomTreeGenerator.BuildMiscClassMembers() at System.Web.Compilation.PageCodeDomTreeGenerator.BuildMiscClassMembers() at System.Web.Compilation.BaseCodeDomTreeGenerator.BuildSourceDataTree() at System.Web.Compilation.BaseCodeDomTreeGenerator.GetCodeDomTree(CodeDomProvider codeDomProvider,StringResourceBuilder stringResourceBuilder,VirtualPath virtualPath) at System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode(AssemblyBuilder assemblyBuilder) at System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider) at System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider) at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath,Boolean noBuild,Boolean allowCrossApp,Boolean allowBuildInPrecompile,Boolean throwIfNotFound,Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context,VirtualPath virtualPath,Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath,HttpContext context,Boolean throwIfNotFound) at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath,Type requiredBaseType,Boolean allowCrossApp) at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context,String requestType,String physicalPath) at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) Error Method: Void AddBuildProvider(System.Web.Compilation.BuildProvider) Help Link:

要解决此问题,我们按照此链接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.以下是我们在更改后得到的错误

The base class includes the field ‘htmlTag’ but its type (System.Web.UI.HtmlControls.HtmlElement) is not compatible with the type of control (System.Web.UI.HtmlControls.HtmlGenericControl)

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

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

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

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

你能帮我们解决这个问题吗?

解决方法

最后我找到了问题的原因

不得不承认这是我的错误和一个令人尴尬的简单修复

默认情况下,当项目的目标框架修改为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以避免将来出现此问题

问候,

湿婆

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读