[英]How to set ASPNETCORE_ENVIRONMENT for console application?
我有以下包含托管服务的简单控制台应用程序:
public static async Task Main(string[] args)
{
using (var host = Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// db context
services.AddEntityFrameworkNpgsql()
.AddDbContext<ApplicationDbContext>();
// hosted services
services.AddHostedService<ConsumeScopedServiceHostedService>();
services.AddScoped<ProcessManuallySendings>();
// services
services.AddHttpClient<ISendPushService, SendPushService>(x
=>
{
x.Timeout = TimeSpan.FromSeconds(65);
});
})
.Build())
{
// Start the host
await host.StartAsync();
// Wait for the host to shutdown
await host.WaitForShutdownAsync();
}
}
}
它适用于我的数据库,这意味着它需要连接字符串。 我有三个appsettings.json
文件:
在开发服务器上,我将使用Development
环境,在生产 - Production
上。 在我的本地机器上,我将使用Local
。 这很简单。 我将在ASPNETCORE_ENVIRONMENT
(操作系统环境变量)的帮助下得到它。
我使用 Linux 并且在我的 shell (zsh) 配置文件中我有:
当我输入我的终端$ echo $ASPNETCORE_ENVIRONMENT
我有Local
。 但是当我启动我的控制台应用程序时
$ dotnet run // in the project folder
它试图从Production
环境开始。 请参阅调试 output:
那么如何设置环境呢? 为什么 Os 变量不起作用?
根据 .Net Core 3.0 以后的文档,主机配置是由带有 DOTNET_ 前缀的环境变量提供的(例如,DOTNET_ENVIRONMENT)。
如果这不起作用,您还可以尝试在您的个人资料中像这样在 launchSettings.json 中设置环境变量。
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT" : "Development"
}
对于 .NET Core 3,通用主机使用DOTNET_
前缀,而不是旧的ASPNETCORE_
前缀。
在 dotnet core 3.1 中为控制台应用程序设置 Rider 环境变量时,无论是在运行/调试配置还是 LaunchSettings 中设置,ASPNETCORE_ENVIRONMENT 和 DOTNET_ENVIRONMENT 都不起作用。
在我的情况下,我正在使用 Microsoft.Extensions.Hosting 和 Microsoft.Extensions.Hosting.Abstractions 并希望将 hostEnvironment 正确解析为Development 。
if (hostEnvironment.IsDevelopment())
{
optionsBuilder.EnableSensitiveDataLogging();
optionsBuilder.AddInterceptors(new EfCommandInterceptor());
}
为了让它工作,我必须创建一个名为ENVIRONMENT的环境变量,并具有适当的值。
ENVIRONMENT=Development
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.