.NET Core 读取配置文件

前面写过一篇《.NET Core类库中读取配置文件》 ,当时对于.NET Core读取配置文件了解有限,这里做下补充:

配置文件内容如下:

{
  "url": "homeinns.com",
  "person": {
    "name": "xfh",
    "age": 26
  }
}

引用Microsoft.Extensions.Configuration.Json

using System;
using System.Configuration;
using System.IO;
using Microsoft.Extensions.Configuration;


namespace coreapp
{
    class Program
    {
        /// <summary>
        /// 加载配置文件,构建IConfigurationRoot
        /// </summary>
        private static readonly IConfigurationBuilder ConfigurationBuilder = new ConfigurationBuilder();

        /// <summary>
        /// 获取配置文件中的内容,继承自IConfiguration
        /// </summary>
        private static IConfigurationRoot _configuration;

        static void Main(string[] args)
        {
            _configuration = ConfigurationBuilder
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(cfg =>
                {
                    cfg.Path = "config.json";
                    cfg.ReloadOnChange = true;
                    cfg.Optional = false;
                })
                //Build方法的调用要在AddJsonFile之后,否则生成的IConfigurationRoot实例的
                //Providers属性不包含任何元素而导致无法读取文件中的信息
                .Build();

            var url = _configuration.GetSection("url");
            //读取json对象,在IConfiguration中,配置文件中的key都是扁平化的
            var pAge = _configuration["person:age"];

           //遍历配置文件中的所有元素
            foreach (var keyValuePair in _configuration.AsEnumerable())
            {
                Console.WriteLine($"{keyValuePair.Key} - {keyValuePair.Value}");
            }

        }
    }
}

还可以将文件内容映射到对象上,需额外引用Microsoft.Extensions.Configuration.Binder包:

class ConfigModel
{
    public string Url { set; get; }
    public Person Person { set; get; }
}
public class Person
{
    public string Name { set; get; }
    public int Age { set; get; }
}

var configModel = new ConfigModel();
ConfigurationBuilder.Build().Bind(configModel);

在ASP.NET Core中,还可以使用IOptions<T>来获取配置信息,但当配置文件被修改时,IOptions<T>中的内容并不会发生改变。

public IConfigurationRoot Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ConfigModel>(Configuration);
}

//然后通过IoC获取IOptions<T>
public void Method(IOptions<ConfigModel> opt)
{

}

以上,是对json文件的操作,接下来操作xml文件。


若要像在.NET Framework中那样读取读取App.configWeb.config,引入System.Configuration.ConfigurationManager包即可:

var value = ConfigurationManager.AppSettings["key"];
Console.WriteLine(value);
Console.WriteLine(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);

或者,引用Microsoft.Extensions.Configuration.Xml包,

_configuration = ConfigurationBuilder
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddXmlFile("App.config")
    .Build();
//不如使用ConfigurationManager方便了,在appSettings节点下添加多个key还会导致读取时抛异常
var value = _configuration.GetSection("appSettings:add:value").Value;

推荐阅读

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

版权声明

本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接。

如有问题, 请发送邮件和作者联系。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AhDung

C#程序防多开又一法

在Main()方法开始时遍历所有进程,获取每个进程的程序集GUID和PID,若发现有跟自己GUID相同且PID不同的进程,就勒令自身退出。

27930
来自专栏蘑菇先生的技术笔记

Redis系列(二)-Hredis客户端设计及开源

23470
来自专栏跟着阿笨一起玩NET

winform 窗体实现增删改查(CRUD)窗体基类模式

参考博客下方:http://www.cnblogs.com/wuhuacong/archive/2010/05/31/1748579.html

39220
来自专栏葡萄城控件技术团队

ASP.NET 5系列教程(七)完结篇-解读代码

在本文中,我们将一起查看TodoController 类代码。 [Route] 属性定义了Controller的URL 模板: [Route("api/[con...

22650
来自专栏ASP.NETCore

.NET Core中使用Razor模板引擎

 在MVC以外的场景中,我们往往需要完成一些模板引擎生成代码或页面的工作;在以前我们一般常用的有Razor、NVeocity、VTemplate。虽然所有的模...

30430
来自专栏木宛城主

SharePoint 2013 创建 Site Collection

在之前的文章中,通过SharePoint Central Administration 创建了Web Application。在这篇文章中将继续SharePo...

22760
来自专栏跟着阿笨一起玩NET

WebService基于SoapHeader实现安全认证

      本文仅提供通过设置SoapHeader来控制非法用户对WebService的调用,如果是WebService建议使用WSE3.0来保护Web服务,如...

23520
来自专栏xiaoheike

Neo4j批量插入(Batch Insertion)

代码可以在github上看到:https://github.com/neo4j/neo4j/blob/2.3.3/community/embedded-exam...

36620
来自专栏菩提树下的杨过

mongodb 速成笔记

以下环境为mac osx + jdk 1.8 + mongodb v3.2.3 一、安装 brew安装方式是mac下最简单的方式 brew update bre...

23050
来自专栏.NET开发者社区

一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](九)

前言 童鞋们,大家好 我是专注.NET开发者社区建设的实践者Rector。 首先,为自己间隔了两个星期五再更新本系列文章找个不充分的理由:Rector最近工作,...

30150

扫码关注云+社区

领取腾讯云代金券