繁体   English   中英

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

[英]How to override appsettings.json for different OS?

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

我有简单的appsettings.json

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

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

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

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

如果可用,我该怎么做?

您可以创建多个 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 文件,然后它将加载该文件。 我用它在开发、测试和生产环境之间进行交换。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM