.NET Core开发实战课程备忘(8) -- 文件配置提供程序:自由选择配置的格式

文件配置提供程序

读取不同文件格式或从不同位置读取配置

  • Microsoft.Extensions.Configuration.Ini
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.UserSecrets
  • Microsoft.Extensions.Configuration.Xml

特性

  • 指定文件可选、必选
  • 指定是否监视文件的变更

代码示例

创建项目

创建名字为ConfigurationFileDemo控制台应用,通过nuget引入以下四个包:

1
2
3
4
Microsoft.Extensions.Configuration.Ini
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Configuration.UserSecrets
Microsoft.Extensions.Configuration.Xml

这里不用引用Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Abstractions两个基础包,是因为其他包已经包含了两个基础包

创建测试配置项appSetting.json

在项目根目录创建appSetting.json文件,内容如下:

1
2
3
4
5
6
{
"Key1": "value1",
"Key2": "value2",
"Key3": false,
"Key4": 10
}
  • Visual Studio 2019中通过右键appSetting.json文件->属性-复制到输出目录选择如果较新则复制
  • Visual Studio Code中通过修改ConfigurationFileDemo.csproj文件,新增文件输出到配置,具体代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration.Ini" Version="3.1.3" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.1.3" />
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.1.3" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Xml" Version="3.1.3" />
    </ItemGroup>
    <ItemGroup>
    <None Update="appSetting.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    </ItemGroup>
    </Project>

    获取appSetting.json里的配置

    修改Program.Main方法,内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    using System;
    using Microsoft.Extensions.Configuration;
    namespace ConfigurationFileDemo
    {
    class Program
    {
    static void Main(string[] args)
    {
    var builder = new ConfigurationBuilder();
    builder.AddJsonFile("appSetting.json",optional:false,reloadOnChange:true);
    var configurationRoot = builder.Build();
    Console.WriteLine("开始了。。输入随意字符串返回配置项,直接回车推出");
    var isStop = Console.ReadLine();
    while (!string.IsNullOrEmpty(isStop))
    {
    Console.WriteLine($"Key1={configurationRoot["Key1"]}");
    Console.WriteLine($"Key2={configurationRoot["Key2"]}");
    Console.WriteLine($"Key3={configurationRoot["Key3"]}");
    Console.WriteLine($"Key4={configurationRoot["Key4"]}");
    Console.WriteLine("=====分割线=====");
    isStop = Console.ReadLine();
    }
    }
    }
    }
    optional:表示文件是否可选,false=没文件会报错,true=可以没有文件

reloadOnChange:表示监视配置文件的变动,配置文件变动会进行重新读取

运行代码,然后在控制台随意输入字符串回车,可以看到以下信息:

1
2
3
4
5
Key1=value1
Key2=value2
Key3=False
Key4=10
=====分割线=====

进入项目根目录/bin/Debug/netcoreapp3.1里,找到appSetting.json文件,修改里面的配置值,再回到控制台输入随意字符串回车,可以看到打印出来的值已经有所变化

获取ini配置文件

在项目根目录创建appSetting.ini文件,内容如下:

1
2
Key4=Hello world
Key5=value5

类似appSetting.json那样配置拷贝到输出目录,修改Program.Main方法,在AddJsonFile方法下面新增添加ini配置源的调用,代码如下:

1
builder.AddIniFile("appSetting.ini", optional: false, reloadOnChange: true);

运行代码,然后在控制台输入随意字符串回车,可以看到以下信息:

1
2
3
4
5
6
Key1=value1
Key2=value2
Key3=False
Key4=Hello world
Key5=value5
=====分割线=====

可以看到ini文件里的配置已经加载进去了,同时后面加载的配置项如果与前面已经加载的配置项名称一致,会覆盖掉前面加载的配置项