如何为不同的 OS 覆盖 appsettings.json?
How to override appsettings.json for different OS?
我的项目是简单的WebApi服务器,基于netcoreapp2.0。
我有简单的appsettings.json
{
"logPath":"C:\logs\myLog.log"
}
而且 logPath
没问题,如果应用程序可以在 Windows 平台上运行,但我也希望 运行 它在 linux 上运行。我知道,我可以使用控制台参数或环境变量来覆盖此设置,但我想获得 OS 特定的 appsettings.json
覆盖。类似 appsettings.linux.json
的东西(可能是 appsettings 文件,取决于 RID)内容为
{
"logPath":"\var\tmp\myLog.log"
}
理想情况下,如果这个理论 appsettings.linux.json
只包含在构建输出中,如果我将为特定的 RID 构建我的应用程序。
如果可用,我该怎么做?
您可以创建多个应用程序设置文件。
appsettings.windows.json
appsettings.linux.json
然后使用 EnvironmentName 变量在它们之间进行交换。
启动
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
如果设置了 {env.EnvironmentName},则首先加载默认的 appsettings.json 文件,然后再加载该文件。我使用它在开发、测试和生产环境之间进行交换。
添加 appsettings.linux.json
包含需要为此覆盖的变量 OS:
{
"logPath":"\var\tmp\myLog.log"
}
在Program.cs
之前调用config.Build()
运行:
if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
config.AddJsonFile("appsettings.linux.json");
}
我的项目是简单的WebApi服务器,基于netcoreapp2.0。
我有简单的appsettings.json
{
"logPath":"C:\logs\myLog.log"
}
而且 logPath
没问题,如果应用程序可以在 Windows 平台上运行,但我也希望 运行 它在 linux 上运行。我知道,我可以使用控制台参数或环境变量来覆盖此设置,但我想获得 OS 特定的 appsettings.json
覆盖。类似 appsettings.linux.json
的东西(可能是 appsettings 文件,取决于 RID)内容为
{
"logPath":"\var\tmp\myLog.log"
}
理想情况下,如果这个理论 appsettings.linux.json
只包含在构建输出中,如果我将为特定的 RID 构建我的应用程序。
如果可用,我该怎么做?
您可以创建多个应用程序设置文件。
appsettings.windows.json
appsettings.linux.json
然后使用 EnvironmentName 变量在它们之间进行交换。
启动
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
如果设置了 {env.EnvironmentName},则首先加载默认的 appsettings.json 文件,然后再加载该文件。我使用它在开发、测试和生产环境之间进行交换。
添加 appsettings.linux.json
包含需要为此覆盖的变量 OS:
{
"logPath":"\var\tmp\myLog.log"
}
在Program.cs
之前调用config.Build()
运行:
if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
config.AddJsonFile("appsettings.linux.json");
}