在.NET Core的默认项目模板中,配置系统默认支持JSON格式的配置文件,实际开发中可能会遇到需要读取XML格式配置文件的需求,比如需要和旧系统对接保持配置格式统一,或者团队更习惯使用XML格式管理配置。下面介绍完整的实现方案。

准备appsettings.xml配置文件
首先需要在项目根目录创建appsettings.xml文件,XML配置文件需要符合标准格式,根节点可以自定义,建议使用Configuration作为根节点,内部配置项按照层级嵌套即可。示例配置内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<Configuration>
<AppSettings>
<ServiceUrl>https://api.ipipp.com/</ServiceUrl>
<MaxRetryCount>3</MaxRetryCount>
</AppSettings>
<Database>
<ConnectionString>Server=127.0.0.1;Database=TestDb;Uid=root;Pwd=123456;</ConnectionString>
<Timeout>30</Timeout>
</Database>
</Configuration>
配置项目加载XML配置
.NET Core的配置系统支持扩展不同的配置源,要读取XML配置文件,需要在程序启动时添加XML配置源。如果是Web项目,修改Program.cs文件中的CreateHostBuilder方法,添加XML配置源的代码。
using Microsoft.Extensions.Configuration;
using System;
namespace XmlConfigDemo
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
// 添加appsettings.xml配置源,可选参数reloadOnChange表示文件变更时自动重新加载
config.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
}
如果是控制台项目,需要在创建IConfiguration实例时添加XML配置源,示例代码如下:
using Microsoft.Extensions.Configuration;
using System;
namespace ConsoleXmlConfigDemo
{
class Program
{
static void Main(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true)
.Build();
// 读取配置测试
string serviceUrl = configuration["AppSettings:ServiceUrl"];
Console.WriteLine($"ServiceUrl: {serviceUrl}");
}
}
}
读取配置内容的方式
直接通过IConfiguration读取
注入IConfiguration实例后,可以通过冒号分隔的路径读取配置值,路径对应XML的节点层级,注意XML的节点名需要严格匹配,区分大小写。
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
namespace XmlConfigDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ConfigController : ControllerBase
{
private readonly IConfiguration _configuration;
public ConfigController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpGet]
public IActionResult GetConfig()
{
// 读取AppSettings下的ServiceUrl
string serviceUrl = _configuration["AppSettings:ServiceUrl"];
// 读取Database下的ConnectionString
string connectionString = _configuration["Database:ConnectionString"];
// 读取AppSettings下的MaxRetryCount,转换为int类型
int maxRetryCount = _configuration.GetValue<int>("AppSettings:MaxRetryCount");
return Ok(new
{
ServiceUrl = serviceUrl,
ConnectionString = connectionString,
MaxRetryCount = maxRetryCount
});
}
}
}
绑定到强类型对象
如果配置项较多,推荐将配置绑定到强类型对象,方便管理和使用。首先定义对应的实体类:
public class AppSettings
{
public string ServiceUrl { get; set; }
public int MaxRetryCount { get; set; }
}
public class DatabaseConfig
{
public string ConnectionString { get; set; }
public int Timeout { get; set; }
}
public class RootConfig
{
public AppSettings AppSettings { get; set; }
public DatabaseConfig Database { get; set; }
}
然后在Startup.cs中配置绑定:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration;
namespace XmlConfigDemo
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// 绑定配置到强类型对象
services.Configure<RootConfig>(Configuration);
// 也可以单独绑定某个节点
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 省略中间件配置代码
}
}
}
使用时通过IOptions<T>注入即可:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
namespace XmlConfigDemo.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class Config2Controller : ControllerBase
{
private readonly AppSettings _appSettings;
private readonly RootConfig _rootConfig;
public Config2Controller(IOptions<AppSettings> appSettings, IOptions<RootConfig> rootConfig)
{
_appSettings = appSettings.Value;
_rootConfig = rootConfig.Value;
}
[HttpGet]
public IActionResult Get()
{
return Ok(new
{
ServiceUrl = _appSettings.ServiceUrl,
MaxRetryCount = _appSettings.MaxRetryCount,
DbTimeout = _rootConfig.Database.Timeout
});
}
}
}
注意事项
- XML配置文件需要设置文件的复制到输出目录属性,否则程序运行时可能找不到文件,可以在VS中右键文件选择属性,将复制到输出目录设置为始终复制。
- XML配置的路径分隔符和JSON一致,都是使用冒号,层级对应XML的嵌套节点。
- 如果同时存在appsettings.json和appsettings.xml,后加载的配置会覆盖先加载的同路径配置值,默认情况下JSON配置先加载,XML配置后加载的话会覆盖同路径的JSON配置。
- XML文件中的节点名如果包含特殊字符,需要符合XML命名规范,否则会导致配置加载失败。
.NET_Coreappsettings_xml配置文件读取IConfiguration修改时间:2026-06-17 05:45:18