You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.7.2应用升级ConfigurationManager后system.web配置报错求助

解决.NET Framework 4.7.2应用升级System.Configuration.ConfigurationManager 6.0.0后的配置节错误

场景回顾

你在迁移大型.NET Framework应用到.NET 6的过程中,采用先将类库迁移至.NET Standard 2.0、保留.NET 4.7.2运行时的策略。升级到System.Configuration.ConfigurationManager 6.0.0后,部署在IIS上的ASP.NET Web服务出现错误:

Unrecognized configuration section system.web

同时存在矛盾:引用System.Configuration会触发DLL版本冲突,不引用则出现上述配置节识别错误,且IIS依赖system.web中的配置项。


可行解决方案

1. 用程序集绑定重定向消除版本冲突

在Web.config的<runtime>节点下添加绑定重定向规则,强制应用使用.NET Framework原生的System.Configuration版本,避免和NuGet包版本的冲突:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Configuration" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

添加后,应用会统一使用系统自带的System.Configuration组件,既解决版本冲突,又能让IIS正常识别system.web配置节。

2. 给.NET Standard类库设置条件引用

如果迁移的类库是.NET Standard 2.0,可在类库的.csproj文件中添加条件引用逻辑,让类库在.NET 4.7.2环境下自动使用原生System.Configuration,其他环境下才用NuGet包:

<ItemGroup>
  <!-- .NET Framework 4.7.2环境下引用系统原生程序集 -->
  <Reference Condition="'$(TargetFramework)' == 'net472'" Include="System.Configuration" />
  <!-- 非.NET Framework环境下使用NuGet包 -->
  <PackageReference Condition="'$(TargetFramework)' != 'net472'" Include="System.Configuration.ConfigurationManager" Version="6.0.0" />
</ItemGroup>

这种方式从根源避免了.NET 4.7.2运行时引入冲突的NuGet组件,同时不影响后续迁移到.NET 6时的引用逻辑。

3. 检查Web.config的配置节注册

确认Web.config中没有手动添加system.web的configSection注册——system.web是.NET Framework内置的配置节,手动注册反而会导致识别错误。如果Web.config中有自定义的configSections节点,确保没有覆盖默认的内置配置节规则。


内容的提问来源于stack exchange,提问作者David Schwartz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:05:07