如何为 .NET Core 3.0 Worker Service 设置环境?

J.D*_*len 5 .net-core

这是我尝试过的:

  1. 我看了一眼Host.CreateDefaultBuilder的源代码,然后将环境变量 DOTNET_Environment 设置为“Production”。那失败了。
  2. 于是我尝试了经典的 ASPNETCORE_ENVIRONMENT。不。
  3. 然后我尝试添加hostsettings.json到执行项目的根目录:
{
    "Environment": "Production"
}
Run Code Online (Sandbox Code Playgroud)

纳达。

为了使用该appsettings.Production.json文件,您究竟如何指定生产机器?

J.D*_*len 11

没关系,我想通了。我很笨

首先,检查您的Properties/launchSettings.json文件中的“DOTNET_ENVIRONMENT”值。这对包括我在内的大多数人来说可能已经足够了。

事实上,它还会在hostsettings.json默认情况下在项目根目录中查找文件。在我的情况下,它只是被launchSettings环境变量声明覆盖了。

但是,如果您想使用我在问题中提到的 JSON 方法,但使用默认文件名或位置以外的其他内容,则必须ConfigureHostConfigurationIHostBuilder链中调用并显式添加文件。

像这样:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureHostConfiguration(
            builder =>
            {
                builder.AddJsonFile("arbitraryFileName.json");
            })
        .ConfigureServices(
            (hostContext, services) =>
            {
                services.AddHostedService<Worker>();
                services.Configure<Settings>(
                    hostContext.Configuration.GetSection("Settings"));
            });
Run Code Online (Sandbox Code Playgroud)

它确实默认使用“DOTNET_”作为前缀而不是“ASPNETCORE_”,因此请确保在您的生产机器/VM/服务上都设置了两者。