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

2024-03-04

我们正在将 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 框架相关服务包,但我们确实没有注意到任何可能导致错误的内容

这种情况是不可接受的,因为我们的团队分布在多个地理位置,我们无法与每个人协调修复当地环境的方法。此外,我们无法签入此文件的更改,因为它会对很多人造成破坏,并且将其发布到生产中也将很困难

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


最后我找到了问题的原因

必须承认这是我的错误,而且修复方法极其简单

默认情况下,当项目的目标框架修改为 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 行,不幸的是它也会显示整个文件已修改。因此,除非我们手动显式更改它,否则我们从不费心将文件签入源代码管理。因此,一些机器将 targetFramework 属性设置为 4.5,而其他机器则没有。这解释了机器之间行为不一致的原因。我们可能需要像 Visual Studio 进行自动编辑时那样格式化 web.config 并检查源控制以避免将来出现此问题

Regards,

Siva

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 .NET Framework 3.5 迁移到 4.5 时出错 的相关文章

随机推荐

  • Twisted 中的多重响应

    我正在尝试开发简单的TCP 使用 Twisted 和 Pygame 进行客户端 服务器游戏 但我在向客户端发送数据时遇到困难 Twisted 不允许我连续发送多个响应 这就是我想做的 我有方法处理玩家状态更改并将其重新发送给其他客户端 de
  • ASP.NET Core 中 Mongodb 数据存储的基于简单令牌的身份验证/授权

    我需要实现非常简单的身份验证机制 基本上有两个角色 Owners and Users 我认为拥有 Enum 就足够了 应用程序本身是SPA 通过Asp net core实现webapi 我看到文章 如何使用 EF Identity 实现它
  • 确定 MIDI 文件的时间划分

    我正在用Python编写一个脚本来解析MIDI文件 是的 我知道Python存在MIDI解析库 但对于我的用例来说 如果我从头开始制作它是最简单的 我遇到的问题之一是时间划分 标头的最后两个字节指定时间划分 但我无法确定文件的时间划分是否以
  • 正则表达式:匹配该字符串

    我无法弄清楚这一点 22 584 r n t t tl 6 579 22 我想匹配 r n t t t 并替换为一个空格 问题是数量 t r and n 波动 周围的人物也是如此 Help s s g s rnt g
  • 如何在 tkinter 中给定时间后运行函数?

    所以我在 tkinter 的画布上有一张 gif 图片 我想让这张照片变成另一张照片 但只持续三秒钟 并将其恢复到原始图片 def startTurn self newgif PhotoImage file 2h gif self left
  • UISlider 无法在原型单元中滑动

    我在故事板的视图控制器中设计了一个原型单元 但不幸的是UISlider细胞内不滑动 Note 此故事板启用了自动布局 Design 这是代码 渲染单元格UITableview UITableViewCell tableView UITabl
  • GitHub PR 使用什么 git 命令来显示差异

    我想使用命令行来生成 GitHub 提供的相同差异 帮助页面将其描述为 头部分支的尖端与头部上次与基础分支同步的提交之间的比较 https help github com articles about comparing branches
  • 拆分unity配置文件

    我需要将我的统一配置拆分为 n 个不同的文件 以便我可以将其中一些文件选择到同一个统一容器中 好的 已经太晚了 但我可以回答 你需要这样的东西 private IUnityContainer ReadContainer var unityC
  • 为什么这个函数没有定义?

    我希望我已经过去了 但为什么单击按钮时调整大小未定义 document ready function var w 320 480 var h 480 620 function resize input scale width w input
  • 如何正确模拟bean HikariDataSource?

    我使用 Mockito 编写了集成测试 但是当设置了与数据库的连接时它可以工作 实际上测试只是检查访问某些端点的可能性 与数据访问层无关 所以我还不需要数据库 数据库关闭时测试失败的原因 HikariDatasource 在 spring
  • 如何限制我的 Windows 应用程序生成进程的单个实例?

    I am working on a Windows application I have created a help file chm using a third party tool and I call it from the Win
  • 创建用于生成 Firebase CustomToken 的服务器时,我仅使用服务帐户还是以某种方式在幕后还使用用户凭据?

    我们很快就会将该项目投入生产 1 我们的移动应用程序将通过将其发布到我们的内部微服务器来创建汇款 此类 post 请求将返回从我们的内部 NodeJs 服务器生成的 CustomToken 2 我们的内部微服务会将此类传输复制到 Fires
  • 将时间值设置到数据框单元格中

    我正在尝试将时间值设置到数据框中 ps data frame t rep NA 2 ps 1 1 strptime 10 30 00 H M S 但我收到错误 provided 9 variables to replace 1 variab
  • 如何使用 grunt 将编译好的 jade 文件复制到目标文件夹

    对于我正在开发的单页应用程序 我具有以下结构 dist css js lib partials 索引 html src css js lib views partials 索引 jade 目录dist将由express服务器用来为项目提供服
  • 清除 Visual Studio 解决方案中的所有断点

    是否有快捷方式可以清除 Visual Studio 解决方案中所有项目内的所有断点 调试 gt 删除所有断点 or Shortcut CTRL SHIFT F9 这适用于调试模式以及
  • React Native:如何检测带有 Notch 的 iPhone?

    我正在尝试举一个具体的案例iPhone Xs Max in react native 这就是我的代码IphoneX from 反应本机 iphone x helper https www npmjs com package react na
  • 读取单选按钮值 - Angular 2

    我正在尝试读取单选按钮值 以角度 2 表示 索引 html
  • 忽略连接字符串中的连接超时属性

    我正在用 C 构建一个应用程序 我使用的连接字符串如下 DSN SomeDataSource Trusted Connection yes Uid SomeId pwd somePwd Connection Timeout x 但无论我设置
  • Python - 使用选择器的非阻塞套接字

    我的问题简而言之 我不知道选择器如何知道哪个套接字应该首先读取或写入 它是一个可以处理多连接的服务器 其流程应该是 服务器创建监听套接字 客户端创建2个套接字并将它们连接到服务器 客户端2套接字发送消息 服务器 2 套接字回显这些消息 客户
  • 将 .NET Framework 3.5 迁移到 4.5 时出错

    我们正在将 Web 应用程序从 NET Framework 3 5 迁移到 4 5 在我们的开发机器上 我们使用 VS2012 并运行 Windows 7 操作系统 在这个过程中我们得到了如下错误 基类包含字段 htmlTag 但其类型 S