.NET Core怎么读取appsettings.xml配置文件

.NET Core 默认不支持 appsettings.xml,需安装 Microsoft.Extensions.Configuration.Xml 包并调用 AddXmlFile() 方法加载;XML 文件须符合 格式,且编码为 UTF-8(无 BOM)。

.NET Core 默认不支持 appsettings.xml 配置文件,它原生只识别 appsettings.json(以及 .ini.env 等),XML 格式需手动添加支持


✅ 正确做法:用 XmlConfigurationProvider

.NET Core 的配置系统是可扩展的,你可以通过第三方或内置方式加载 XML。从 .NET 6 开始,官方并未内置 XML 支持,但社区常用 Microsoft.Extensions.Configuration.Xml 包(由 Microsoft 官方维护)来实现。

1. 安装 NuGet 包

在项目中安装:

dotnet add package Microsoft.Extensions.Configuration.Xml

✅ 注意:该包支持 .NET Core 3.1+ 和 .NET 5/6/7/8。

2. 添加 appsettings.xml 文件

在项目根目录下创建 appsettings.xml,例如:



  
    
    
    
  

⚠️ 注意:XML 结构必须符合 格式,这是 XmlConfigurationProvider 所识别的标准格式(兼容旧版 Web.config 风格)。

3. 在 Program.cs 中注册 XML 配置源

.NET 6+(Minimal Hosting Model)示例:

var builder = WebApplication.CreateBuilder(args);

// 添加 XML 配置(放在 JSON 之后会覆盖同名项,按添加顺序决定优先级)
builder.Configuration
    .AddXmlFile("appsettings.xml", optional: true, reloadOnChange: true);

var app = builder.Build();

如果还想保留默认的 appsettings.json,就不用删它——多个配置源会自动合并。

4. 使用配置(强类型绑定推荐)

定义配置类:

public class AppSettings
{
    public ConnectionStrings ConnectionStrings { get; set; } = new();
    public Logging Logging { get; set; } = new();
    public Feature Feature { get; set; } = new();
}

public class ConnectionStrings
{
    public string Default { get; set; } = string.Empty;
}

public class Logging
{
    public LogLevel LogLevel { get; set; } = new();
}

public class LogLevel
{
    public string Default { get; set; } = "Information";
}

public class Feature
{
    public bool EnableCache { get; set; }
}

Program.cs 中绑定:

builder.Services.Configure(builder.Configuration);

然后在 Controller 或 Service 中注入使用:

public class HomeController : Controller
{
    private readonly IOptions _settings;

    public HomeController(IOptions settings)
    {
        _settings = settings;
    }

    public IActionResult Index()
    {
        var conn = _settings.Value.ConnectionStrings.Default;
        return Content($"Conn: {conn}");
    }
}

❌ 常见误区提醒

  • appsettings.xml 不是默认支持的,不装包 + 不调用 AddXmlFile() 就读不到
  • XML 文件编码建议用 UTF-8(无 BOM),否则可能解析失败
  • key 名称区分大小写,且层级靠 : 分隔(和 JSON 一致),不是靠 XML 节点嵌套
  • 不要试图用 ConfigurationBuilder.AddXmlStream() 手动解析复杂结构——用标准 AddXmlFile 更稳

基本上就这些。XML 支持虽非开箱即用,但加一个包、一行代码就能搞定,和 JSON 体验几乎一致。