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

来源:我的博客作者:北京SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《.NET Core怎么读取appsettings.xml配置文件》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《.NET Core怎么读取appsettings.xml配置文件》有用,将其分享出去将是对创作者最好的鼓励。

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

.NET Core怎么读取appsettings.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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。