.net core 6+可通过microsoft.extensions.configuration.xml包支持xml配置,需用addxmlfile加载,根节点必须为,配置项以冒号分隔路径表示,不支持属性值和复杂嵌套。

在 .NET Core 中,XML 配置文件不是默认支持的格式(默认是 JSON),但可以通过自定义 IConfigurationProvider 或使用第三方库来读取 XML 配置。官方 SDK 不直接内置 XML 配置源,但你可以轻松扩展。
添加 XML 配置支持(推荐方式)
.NET Core 6+ 支持通过 AddXmlFile 扩展方法加载 XML 配置,前提是引入 Microsoft.Extensions.Configuration.Xml 包:
- 在项目中安装 NuGet 包:
Microsoft.Extensions.Configuration.Xml - 在
Program.cs中注册 XML 配置源(顺序影响覆盖逻辑):
var builder = WebApplication.CreateBuilder(args);
// 加载 appsettings.xml(需放在项目根目录,设为“复制到输出目录”)
builder.Configuration.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);
// 或指定完整路径
// builder.Configuration.AddXmlFile("config/app.config.xml", optional: false);
XML 配置文件格式要求
.NET Core 的 XML 配置解析器要求结构扁平、层级清晰,不支持复杂嵌套或属性混合写法。推荐用以下格式:
<configuration>
<ConnectionStrings>
<DefaultConnection>Server=localhost;Database=MyApp;Trusted_Connection=true</DefaultConnection>
</ConnectionStrings>
<Logging>
<LogLevel>
<Default>Information</Default>
<Microsoft.AspNetCore>Warning</Microsoft.AspNetCore>
</LogLevel>
</Logging>
<FeatureFlags>
<EnableCaching>true</EnableCaching>
<ShowDebugInfo>false</ShowDebugInfo>
</FeatureFlags>
</configuration>
注意:根节点必须是 <configuration></configuration>;每个配置项用层级路径表示(如 FeatureFlags:EnableCaching);不支持 XML 属性作为配置值(例如 <item enabled="true"></item> 不会被识别)。
在代码中读取 XML 配置值
和读取 JSON 配置完全一致,使用 IConfiguration 接口即可:
- 注入
IConfiguration到服务或控制器中 - 用索引器或
GetSection()获取节点 - 用
GetValue<t>()</t>或绑定 POCO 类
// 读取单个值
string connStr = configuration["ConnectionStrings:DefaultConnection"];
// 读取布尔值
bool enableCache = configuration.GetValue<bool>("FeatureFlags:EnableCaching");
// 绑定到类
var features = configuration.GetSection("FeatureFlags").Get<FeatureOptions>();
常见问题与注意事项
XML 配置虽可用,但实践中要注意几个关键点:
- XML 文件需设置“复制到输出目录”属性(
CopyToOutputDirectory),否则运行时找不到 - 多个配置源(如 JSON + XML)同时存在时,后添加的源会覆盖前面同名键的值
- XML 不支持数组语法(如
<urls><url>https://a.com</url><url>https://b.com</url></urls>),建议改用 JSON 或用冒号分隔的键名模拟(如Urls:0,Urls:1) - 如果需要更灵活的 XML 解析(如带属性、命名空间、复杂结构),建议用
System.Xml.Linq手动解析,再映射到配置模型,而非依赖配置系统










