如何使用环境变量覆盖 ASP.NET Core 配置数组设置

Posted

技术标签:

【中文标题】如何使用环境变量覆盖 ASP.NET Core 配置数组设置【英文标题】:How to override ASP.NET Core configuration array settings using environment variables 【发布时间】:2016-10-06 01:19:00 【问题描述】:

TL;DR

在一个 ASP.NET Core 应用程序中,我有一个 appsettings.json 配置文件,它使用 JSON 数组来配置一组设置。

如何使用环境变量覆盖其中一个数组对象的设置?

背景

我在 ASP.NET Core 应用程序中使用 Serilog 并使用 Serilog.Settings.Configuration,以允许使用 appsettings.json 对其进行配置。

配置是这样的:


  "Serilog": 
    "Using":  ["Serilog.Sinks.Literate"],
    "MinimumLevel": "Debug",
    "WriteTo": [
       "Name": "File", "Args":  "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt"  
    ],
    "Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": 
        "Application": "Sample"
    
  

部署时,我想覆盖一些设置,例如MinimumLevel,以及日志文件的路径。我的首选选项是在部署到 Azure 应用服务时通过环境变量执行此操作,因此我将通过 Azure 管理门户使用应用设置(这些被实现为环境变量)。

我可以通过添加名称为Serilog:MinimumLevel 和应用程序名称Serilog:Properties:Application 的环境变量轻松设置MinimumLevel

用数组指定设置的格式是什么?

【问题讨论】:

我遇到了同样的问题 - 我无法忍受名称、冒号和数组索引的魔力 (Serilog:WriteTo:0:Args:path),几个月前我写了一个新的配置提供程序使这种配置更容易 - github.com/dsbenghe/NotMicrosoft.Configuration @Dumitru "创建 appsettings.envname.json 并重复整个过程!!! Serilog json 块再次使用 MinimumLevel 和 pathFormat 的新值 - 这可能是你能做的最糟糕的事情" - 这是不对。您只需要指定更改的设置。 【参考方案1】:

在调试器中查看配置后我找到了答案。

Serilog__WriteTo__0__Args__path(所有平台) Serilog:WriteTo:0:Args:path (Windows) Serilog--WriteTo--0--Args--path(来自 Azure Key Vault)

注意:Configuration in ASP.NET Core 文档现在涵盖了这一点。

所以我需要像使用名称一样使用数组索引(从零开始)。

这是调试器的屏幕截图,也(感谢 cmets 中的Victor Hurdugaci),unit tests 是查找示例的好地方。

【讨论】:

测试是寻找示例的另一个好地方:github.com/aspnet/Configuration/blob/dev/test/… @VictorHurdugaci 链接已死。这是一个更新的:github.com/aspnet/Configuration/blob/… @JamesSkimming 嗯,我只检查了评论中的链接:) 如果你在unix系统中使用这个环境变量,你必须把:替换成__Serilog__WriteTo__0__Args__path 现在的文档建议始终使用 __ 形式而不是 : 形式,即使在 Windows 上也是如此。

以上是关于如何使用环境变量覆盖 ASP.NET Core 配置数组设置的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 docker-compose 环境变量不起作用 ASP.Net Core MVC

如何从 ASP.NET Core 的 Main() 中获取环境变量?

在 ASP.NET Core 中读取环境变量

Asp.Net Core 入门—— 环境变量 TagHelper

如何覆盖 ASP.NET Core Identity 的密码策略

asp.net core环境变量详解