给出以下程序:
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
,但是将其解析为字符串,并且无法将其转换为布尔值。 与其他所有非布尔选项都可用的相同方法,这似乎暗示着有一些未公开的方法将变量定义为布尔值。
答案 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"