【发布时间】:2020-03-14 12:31:52
【问题描述】:
有没有办法“开箱即用”让appsettings.json 值中的环境变量自动扩展?
举一个人为的例子:
{
...
"MyPath1": "C:/MyApp/%ENV%/Myfolder1/MyFile1.dat",
"MyConnectionString": "Server=MyServer%ENV%..."
...
}
我的目标是能够通过更改单个环境变量来切换我的环境,并让它影响多个 appsetting 值,而不是拥有每个环境的配置文件。
更新
我查看了the source code of JsonConfigurationProvider,据我所知,没有这样的开箱即用功能。
我可以看到应该可以通过从JsonConfigurationProvider 派生一个自定义类并覆盖Load() 方法:
public override void Load()
{
base.Load();
foreach(var key in Data.Keys)
{
Data[key] = Environment.ExpandEnvironmentVariables(key);
}
}
但我对 .NET Core 配置还很陌生,这就引出了第二个问题:
如何让这个自定义实现替换标准实现? IE。删除默认的 appsettings.json 和 appsettings.environment.json 提供程序并替换为自定义提供程序。大概要在Program.cs中添加一些东西:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration(config =>
{
config.??? what do I need here?
}
);
【问题讨论】:
-
我认为你已经找到了唯一的解决方案,否则通过 github/nuget 进行搜索。
-
ConfigureAppConfiguration有几个选项。默认设置是this(请参阅最后一个项目符号,“应用程序配置来自:”)。你仍然想要所有这些资源,以相同的顺序,还是你可以简化?例如你可以只有一个来源,即带有 env 替换的appsettings.json文件吗? -
@KirkLarkin - 我想替换前两个源,appsettings.json 和 appsettings.{Environment}.json。因此它的行为类似于其他开发人员熟悉的默认配置,只是它添加了环境变量扩展。
-
我会说你有两个选择:1 读取配置并用你的环境替换“占位符”......但这只是 hacky......我只会使用普通的多文件.net 核心中可用的系统已经像 appsettings.json 和 appsetings.environmentname.json
标签: c# asp.net-core .net-core asp.net-core-2.1