文件配置提供程序

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

特性

  • 指定文件是否可选、必选
  • 指定是否监视文件的变更,也就意味着如果文件变更我们是可以知道的

示例

新建控制台应用程序👉添加包
image.png
添加一个appsetting.json文件在项目中
image.pngimage.png
将json文件设置为:右键👉属性👉复制到输出目录:始终复制

  1. using Microsoft.Extensions.Configuration;
  2. using System;
  3. namespace ConfigurationFileDemo
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. var builder = new ConfigurationBuilder();
  10. var root = builder.AddJsonFile("appsettings.json").Build();
  11. Console.WriteLine($"Key1 : {root["key1"]}");
  12. Console.WriteLine($"Key2 : {root["key2"]}");
  13. }
  14. }
  15. }

输出:image.png
**AddJsonFile()**方法由其它两个参数,**optional****reloadOnChange**
**optional参数默认是false,功能是当文件不存在时是否报错。**
**reloadOnChange**``**参数默认是true,功能是每次我们文件变更了,它会去读取我们新的文件。**
这里,我们
将代码修改为:

  1. using Microsoft.Extensions.Configuration;
  2. using System;
  3. namespace ConfigurationFileDemo
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. var builder = new ConfigurationBuilder();
  10. var root = builder.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
  11. Console.WriteLine($"Key1 : {root["key1"]}");
  12. Console.WriteLine($"Key2 : {root["key2"]}");
  13. Console.ReadKey();
  14. Console.WriteLine($"Key1 : {root["key1"]}");
  15. Console.WriteLine($"Key2 : {root["key2"]}");
  16. Console.ReadKey();
  17. }
  18. }
  19. }

然后运行,代码会在ReadKey()处停住,之后我们去修改Json文件,将Key1Value1修改为NewValue1,然后保存。
image.png
输出:image.png

然后我们再看一看ini文件的操作
首先创建一个appsetting.ini操作同上 ,输入内容:
image.png
将代码修改为

  1. using Microsoft.Extensions.Configuration;
  2. using System;
  3. namespace ConfigurationFileDemo
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. var builder = new ConfigurationBuilder();
  10. var root = builder
  11. .AddJsonFile("appsettings.json")
  12. .AddIniFile("appsettings.ini")
  13. .Build();
  14. Console.WriteLine($"Key1 : {root["key1"]}");
  15. Console.WriteLine($"Key2 : {root["key2"]}");
  16. Console.WriteLine($"Key3 : {root["key3"]}");
  17. Console.ReadKey();
  18. }
  19. }
  20. }

输出:image.png

我们发现Key3输出的是ini文件的值,说明Builder中添加我们的配置源是有顺序关系的,后添加的配置会覆盖先添加的配置。