Net Core中的配置文件介绍
1 简单回顾.Net Framework配置文件
.Net Core中的配置文件操作较.Net Framework有了很大的改动。介绍.Net Core中配置文件操作前,我们先回顾下.Net Framework中配置文件的操作。在.Net Framework中应用程序的配置文件只支持XML形式,应用程序的配置文件一般是App.Config或者Web.Config,添加配置文件最常用的方法是:在appSettings和ConnectionString节点下添加子节点,简单看一个栗子
配置文件下添加子节点:
<appSettings> <add key="mykey" value="myvalue"/> </appSettings> <connectionStrings> <add name="connstr" connectionString="server=.;uid=sa;pwd=xxxx;database=mydbname"/> </connectionStrings>
获取配置文件中的值:
//MVC中读取配置文件 ViewBag.value = WebConfigurationManager.AppSettings["mykey"]; ViewBag.connstr = WebConfigurationManager.ConnectionStrings["connstr"].ConnectionString; //Webapi,Console,Winform应用读取配置文件 string s1 = ConfigurationManager.AppSettings["mykey"]; string s2 = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
.Net Core的配置文件相比于.Net Framework最大的特点是其不仅仅支持XML格式的配置文件,还支持Json,Ini,memory,command,env(环境变量)。首先看一个Json配置文件的栗子。
2 Json配置文件的操作
这里采用一个控制台项目作为栗子,Asp.NET Core中配置文件的操作基本一致。首先添加两个包
Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json
添加配置文件,文件名可以任意指定,这里使用appsettings.json,设置属性为【始终复制】
{ "isRight": true, "myArray": [ 10, 20, 30, 40 ], "myJson": { "key1": "json中的value1", "key2": "json中的value2" } }
读取配置文件中数据,代码如下:
class Program { static void Main(string[] args) { IConfiguration configuration = new ConfigurationBuilder() //设置配置文件基本路径 .SetBasePath(Environment.CurrentDirectory) //添加json配置。参数:optional配置文件是否为可选的,reloadOnChange是否热加载 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .Build(); Console.WriteLine(configuration["isRight"]); Console.WriteLine(configuration["myArray:0"]);//输出myArray[0], 【:】表示下一级节点 Console.WriteLine(configuration["myJson:key1"]);//输出myJson->key1 【:】表示下一级节点 Console.ReadKey(); } }
在.Net Core中使用ConfigurationBuilder对象的 SetBasePath(strPath) 设置配置文件的基本路径, AddJsonFile("filePath") 方法添加配置文件,Build方法创建配置对象。
运行结果为
3 其他类型的配置文件
上边提到.Net Core的配置文件支持多种类型,Configuration的数据源可以来自Json,XML,环境变量,Ini,Memory等,下边我们看一下怎么去操作其他类型配置文件。
首先添加几个Package
//xml配置文件 Install-Package Microsoft.Extensions.Configuration.Xml //ini配置文件 Install-Package Microsoft.Extensions.Configuration.Ini //环境变量 Install-Package Microsoft.Extensions.Configuration.EnvironmentVariables //支持强类型读取,扩展了IConfiguration的方法 Install-Package Microsoft.Extensions.Configuration.Binder
添加XML配置文件,文件名为appsettings.xml,属性设置为【始终复制】
<appsettings> <mykey>myvalue</mykey> <mysql> <server>192.168.11.11</server> <port>3306</port> </mysql> </appsettings>
一个简单的栗子
class Program { static void Main(string[] args) { //memory配置数据 var initData = new List<KeyValuePair<string, string>>() { new KeyValuePair<string, string>("initKey1", "初始配置数据1"), new KeyValuePair<string, string>("initKey2", "初始配置数据2"), }; IConfiguration configuration = new ConfigurationBuilder() //设置根目录 .SetBasePath(Environment.CurrentDirectory) //添加json配置。参数:optional配置文件是否为可选的,reloadOnChange是否热加载 .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) //添加xml文件配置 .AddXmlFile("appsettings.xml") //添加memory中的配置 .AddInMemoryCollection(initData) //将环境变量添加到配置 .AddEnvironmentVariables() .Build(); //方式1:弱类型读取 string str1 = configuration["initKey1"]; string str2 = configuration["isRight"]; string str3 = configuration["myArray:0"]; string str4 = configuration["myJson:key1"]; //我电脑上配置的NPM_HOME环境变量 string str5 = configuration["NPM_HOME"]; string str6 = configuration["mysql:server"]; Console.WriteLine($"{str1}--{str2}--{str3}--{str4}--{str5}--{str6}"); //方式2:强类型 //Microsoft.Extensions.Configuration.Binder扩展了Configuration的方法 string strA = configuration.GetValue<string>("initKey1"); bool boolB = configuration.GetValue<bool>("isRight"); int intC = configuration.GetValue<int>("myArray:0"); string strD = configuration.GetValue<string>("myJson:key1"); //我电脑上配置的NPM_HOME环境变量 string strE = configuration.GetValue<string>("NPM_HOME"); string strF = configuration.GetValue<string>("mysql:server"); Console.WriteLine($"{strA}--{boolB}--{intC}--{strD}--{strE}--{strF}"); Console.ReadKey(); } }