3

我有以下包含托管服务的简单控制台应用程序:

    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(OS 环境变量)的帮助下得到它。

我使用 Linux,在我的 shell (zsh) 配置文件中我有:

在此处输入图像描述

当我输入我的终端时,$ echo $ASPNETCORE_ENVIRONMENT我有Local. 但是当我启动我的控制台应用程序时

$ dotnet run // in the project folder

它试图从Production环境开始。查看调试输出:

在此处输入图像描述

那么如何设置环境呢?为什么 Os 变量不起作用?

4

2 回答 2

11

根据 .Net Core 3.0 及更高版本的文档,主机配置由以 DOTNET_ 为前缀的环境变量提供(例如,DOTNET_ENVIRONMENT)。

如果这不起作用,您还可以尝试在您的个人资料中设置 launchSettings.json 中的环境变量。

"environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development",
    "DOTNET_ENVIRONMENT" : "Development"
}
于 2020-02-13T12:06:58.383 回答
8

在 .NET Core 3 中,通用主机使用DOTNET_前缀,而不是旧ASPNETCORE_前缀。

于 2020-02-13T12:09:43.970 回答