在 .NET Core 中使用环境变量指定布尔变量

Sho*_*nte 8 c# .net-core asp.net-core

鉴于以下程序:

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((builderContext, config) =>
                {
                    var env = builderContext.HostingEnvironment;
                    config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
                        .AddEnvironmentVariables(prefix: "Prefix_");
                })
                .UseStartup<Startup>();
    }
Run Code Online (Sandbox Code Playgroud)

和配置通常定义appsettings.json为:

{
    "SomeSection": {
        "SomeOption": true
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法将它覆盖为环境变量(使用文档中指定的方法)?


我试过(我在 macOS 上,但同样的问题也发生在 Linux 和 Docker Compose 中):

export Prefix_SomeSection__SomeOption=true
Run Code Online (Sandbox Code Playgroud)

但它被解析为一个字符串,它不能将其转换为布尔值。相同的方法适用于所有其他非布尔选项,这似乎暗示有一些未记录的方法将变量定义为布尔值。

Sho*_*nte 7

我是这样设置环境变量的docker-compose.yml

version: '3.4'

services:

  server:
    environment:
      Prefix_SomeSection__SomeOption: true

Run Code Online (Sandbox Code Playgroud)

我得到的错误与docker-compose.yml,而不是 .NET Core 相关,它是:

包含 true,这是一个无效类型,它应该是一个字符串、数字或空值

解决方案是将其包装true成这样的字符串:

version: '3.4'

services:

  server:
    environment:
      Prefix_SomeSection__SomeOption: "true"

Run Code Online (Sandbox Code Playgroud)

  • 感谢您在找到解决方案后回来回答您自己的问题。 (2认同)