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

6

这是我尝试过的:

  1. 我快速查看了Host.CreateDefaultBuilder的源代码,并从设置环境变量DOTNET_Environment开始,将其设为“Production”。但是失败了。
  2. 然后我尝试使用经典的ASPNETCORE_ENVIRONMENT。不行。
  3. 然后我尝试在执行项目的根目录下添加hostsettings.json
{
    "Environment": "Production"
}

没有。

怎么指定一个生产机器来使用appsettings.Production.json文件?

1个回答

16

算了,我自己解决了,我真笨。

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

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

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

像这样:

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"));
            });

确实,默认情况下前缀为“DOTNET_”而不是“ASPNETCORE_”,因此请确保在您的生产机器/虚拟机/服务上都设置了这两个前缀。


1
你是否尝试在设置目标环境时使用发布配置文件来管理此服务,例如<EnvironmentName>Dev</EnvironmentName>?我一直在尝试这样做,但似乎不起作用,然而对于Web应用程序来说却可以正常工作。 - bitshift
抱歉我错过了这个问题!不,我还没有尝试使用发布配置文件来发布控制台应用程序。但是,我仍然会选择在目标机器上设置/读取环境变量以指示其区域(dev,stage,prod等)。您还可以在发布时执行特定于目标操作系统的脚本以设置环境变量。 - J.D. Mallen
1
我正在开发一个WebJob控制台应用程序(dotnet 5),但是一切都不起作用;-(它总是显示“Production”。 - bkwdesign

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接