簡體   English   中英

如何為控制台應用程序設置 ASPNETCORE_ENVIRONMENT?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM