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

迁移含app.config和.settings的.NET Framework项目至.NET Core如何规避配置错误

解决.NET Core WinForms项目同时存在app.config和Settings.settings时的配置读取报错

我之前在迁移.NET Framework项目到.NET Core的时候也碰到过一模一样的问题,当时折腾了好半天,终于找到不用删除app.config就能解决的办法,跟你分享下:

问题根源

这个报错是Visual Studio的一个已知bug:当你手动添加app.config后,再通过项目属性的Settings标签生成Settings.settings文件时,VS会在app.config里重复写入配置节点(比如重复的<configSections>或<userSettings>)。运行时CLR的配置解析器对这种重复节点的容忍度更高,所以程序能正常读写设置,但VS自带的配置读取模块会判定XML无效,从而弹出报错。

解决步骤

  1. 先完全关闭Visual Studio(确保项目没有被占用)
  2. 找到项目目录下的app.config文件,用记事本或者VS Code这类文本编辑器打开
  3. 检查文件内容,你会发现存在重复的配置节点——通常是两个<configSections>,或者两组<userSettings>
  4. 合并并清理配置:
    • 只保留一个<configSections>节点,把另一个节点里的内容(比如Settings对应的sectionGroup)合并到保留的节点中
    • 删除重复的<userSettings>节点,只保留包含你创建的Setting配置项的那一组
  5. 保存修改后的app.config,重新打开Visual Studio和项目,报错就会消失了

正确的app.config示例

这里给一个规范的配置文件模板(替换成你自己的项目命名空间即可):

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="YourProjectName.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <YourProjectName.Properties.Settings>
            <setting name="Setting" serializeAs="String">
                <value>test</value>
            </setting>
        </YourProjectName.Properties.Settings>
    </userSettings>
</configuration>

补充说明

后续再通过项目属性修改Settings时,VS会基于规范的配置文件进行更新,不会再出现重复节点的问题。另外这个bug在多个Visual Studio版本(包括你提到的16.7.3)中都存在,只要保证app.config的XML结构唯一、没有重复节点,就能彻底消除这个报错。

内容的提问来源于stack exchange,提问作者Matthew Watson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:52:41