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

时间:2019-11-13 14:57:34

标签: c# asp.net-core .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>();
    }

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

{
    "SomeSection": {
        "SomeOption": true
    }
}

是否有办法将其覆盖为环境变量(使用the method specified in the docs)?


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

export Prefix_SomeSection__SomeOption=true

,但是将其解析为字符串,并且无法将其转换为布尔值。 与其他所有非布尔选项都可用的相同方法,这似乎暗示着有一些未公开的方法将变量定义为布尔值。

1 个答案:

答案 0 :(得分:0)

我正在使用docker-compose.yml设置环境变量,如下所示:

version: '3.4'

services:

  server:
    environment:
      Prefix_SomeSection__SomeOption: true

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

  

包含true,这是无效的类型,应为字符串,数字或null

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

version: '3.4'

services:

  server:
    environment:
      Prefix_SomeSection__SomeOption: "true"