我知道,对于桌面应用程序而言,旧的*.config
机制共有四个层次的配置文件:
machine.config
- 存储在 .net 安装目录中app.config
- 存储在应用程序目录中user.config
- 存储在用户漫游目录中user.config
- 存储在用户本地目录中
在使用JSON文件的新系统中,这些文件的等效物是什么?
我知道,对于桌面应用程序而言,旧的*.config
机制共有四个层次的配置文件:
machine.config
- 存储在 .net 安装目录中app.config
- 存储在应用程序目录中user.config
- 存储在用户漫游目录中user.config
- 存储在用户本地目录中在使用JSON文件的新系统中,这些文件的等效物是什么?
ConfigurationBuilder
来进行所有这些细节的设置,通过按正确顺序添加已知的配置文件,它具有灵活性以及更多功能。缺点是它需要写得略微冗长。不过,如果需要,可以编写扩展方法来简化它:
注意:如果你正在使用asp.netcore,那么在配置方法(例如ConfigureAppConfiguration
)中,你可以获得访问 IConfigurationRoot
,因此不需要像下面所示一样实例化新的 ConfigurationBuilder
。
var configuration = new ConfigurationBuilder()
.SetBasePath(...)
// some machine config
.AddJsonFile(@"<The path to your globalSettings>\appsettings.json", optional: true)
// Your main app settings
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
// environment specific
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
// Machine specific
.AddJsonFile($"appsettings.{Environment.MachineName}.json", optional: true)
// user specific
.AddJsonFile(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),"Your App Name","appsettings.json"), optional: true)
.AddEnvironmentVariables()
...
免责声明:以下内容并非意在呈现最佳代码,而是一篇致敬之作。您需要进行适合自己和环境的操作。
更详细的解释:
IConfigurationRoot
只是一个提供程序和来源的集合。提供程序会折叠成键值对的集合。每个后续添加的提供程序都有能力覆盖前面提供程序的值(如果有),这比旧的 app.config
/web.config
范例好了约1000倍。