.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 体验几乎一致。










