如何为不同的操作系统覆盖appsettings.json?

时间:2017-12-07 10:02:44

标签: c# .net-core .net-standard-2.0

我的项目是简单的WebApi服务器,基于netcoreapp2.0。

我有简单的appsettings.json

{
  "logPath":"C:\logs\myLog.log"
}

这是logPath好的,如果应用程序可以在Windows平台上运行,但我也想在linux上运行它。我知道,我可以使用控制台args或环境变量来覆盖此设置,但我希望获得appsettings.json的操作系统特定覆盖。类似appsettings.linux.json(可能是appsettings文件,取决于RID)和内容

{
  "logPath":"\var\tmp\myLog.log"
}

理想情况下,如果此理论appsettings.linux.json仅包含在构建输出中,如果我将为特定RID构建我的应用程序。

如果可以,我该怎么办?

2 个答案:

答案 0 :(得分:3)

您可以创建多个appsettings文件。

  

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文件,然后加载该文件。我用它在Dev,测试和生产环境之间进行交换。

答案 1 :(得分:0)

添加 appsettings.linux.json 包含需要为此操作系统覆盖的变量:

{
    "logPath":"\var\tmp\myLog.log"
}

在调用 Program.cs 之前在 config.Build() 中运行:

if(RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
{
    config.AddJsonFile("appsettings.linux.json");
}