如何为控制台应用程序设置 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
(OS 环境变量)获取它。
我使用 Linux 并且在我的 shell (zsh) 配置文件中我有:
当我在终端机中输入 $ echo $ASPNETCORE_ENVIRONMENT
时,我得到了 Local
。
但是当我启动我的控制台应用程序时
$ dotnet run // in the project folder
它正在尝试从 Production
环境开始。
查看调试输出:
那么如何设置环境呢?为什么 Os 变量不起作用?
根据 .Net Core 3.0 以上的 docs,主机配置由前缀为 DOTNET_ 的环境变量提供(例如,DOTNET_ENVIRONMENT)。
如果这不起作用,您也可以尝试在您的配置文件中像这样在 launchSettings.json 中设置环境变量。
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT" : "Development"
}
对于 .NET Core 3,通用主机 uses the DOTNET_
prefix,而不是旧的 ASPNETCORE_
前缀。
我有以下包含托管服务的简单控制台应用程序:
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 变量不起作用?
根据 .Net Core 3.0 以上的 docs,主机配置由前缀为 DOTNET_ 的环境变量提供(例如,DOTNET_ENVIRONMENT)。
如果这不起作用,您也可以尝试在您的配置文件中像这样在 launchSettings.json 中设置环境变量。
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"DOTNET_ENVIRONMENT" : "Development"
}
对于 .NET Core 3,通用主机 uses the DOTNET_
prefix,而不是旧的 ASPNETCORE_
前缀。