文件配置提供程序
读取不同文件格式或从不同位置读取配置
- Microsoft.Extensions.Configuration.Ini
- Microsoft.Extensions.Configuration.Json
- Microsoft.Extensions.Configuration.UserSecrets
- Microsoft.Extensions.Configuration.Xml
特性
- 指定文件可选、必选
- 指定是否监视文件的变更
代码示例
创建项目
创建名字为ConfigurationFileDemo
的控制台应用
,通过nuget
引入以下四个包:
1 | Microsoft.Extensions.Configuration.Ini |
这里不用引用Microsoft.Extensions.Configuration
和Microsoft.Extensions.Configuration.Abstractions
两个基础包,是因为其他包已经包含了两个基础包
创建测试配置项appSetting.json
在项目根目录创建appSetting.json
文件,内容如下:
1 | { |
- 在
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
方法,内容如下:optional:表示文件是否可选,false=没文件会报错,true=可以没有文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25using 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();
}
}
}
}
reloadOnChange:表示监视配置文件的变动,配置文件变动会进行重新读取
运行代码,然后在控制台随意输入字符串回车,可以看到以下信息:
1 | Key1=value1 |
进入项目根目录/bin/Debug/netcoreapp3.1里,找到appSetting.json
文件,修改里面的配置值,再回到控制台输入随意字符串回车,可以看到打印出来的值已经有所变化
获取ini
配置文件
在项目根目录创建appSetting.ini
文件,内容如下:
1 | Key4=Hello world |
类似appSetting.json
那样配置拷贝到输出目录,修改Program.Main
方法,在AddJsonFile
方法下面新增添加ini
配置源的调用,代码如下:
1 | builder.AddIniFile("appSetting.ini", optional: false, reloadOnChange: true); |
运行代码,然后在控制台输入随意字符串回车,可以看到以下信息:
1 | Key1=value1 |
可以看到ini
文件里的配置已经加载进去了,同时后面加载的配置项如果与前面已经加载的配置项名称一致,会覆盖掉前面加载的配置项