gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:44:09 27 4
gpt4 key购买 nike

我们正在将 Web 应用程序从 .NET 框架 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, Boolean fInTemplate, Boolean topLevelControlInTemplate, 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 noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, 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 框架相关的服务包与不工作的机器上的服务包,我们真的没有注意到任何可能导致错误的东西

这种情况是 Not Acceptable ,因为我们的团队分布在多个地理位置,我们无法与每个人就修复本地环境的方式进行协调。此外,我们无法通过更改 checkin 此文件,因为它会对许多人造成破坏,并且将其发布到生产环境也将很困难

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

最佳答案

终于找到问题的原因了

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

默认情况下,当项目的目标框架修改为 4.5 时,它会更新 web.config 如下

<system.web>
<compilation debug="true" targetFramework="4.5"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
</system.web>

首先我们没有意识到升级到 4.5 时 VS 会修改 web.config。其次,我们的 Web.Config 是一个大文件,即使修改了 1 行,不幸的是,它显示整个文件都已修改。因此,除非我们手动显式更改文件,否则我们从不费心将文件 checkin 源代码管理。因此,有些机器将 targetFramework 属性设置为 4.5,而其他机器则没有。这解释了跨机器的不一致行为。我们可能需要像visual studio在进行自动编辑和检查源控制时所做的那样格式化web.config以避免将来出现此问题

问候,

湿婆

关于asp.net - 将 .NET Framework 3.5 迁移到 4.5 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24936350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com