Linux env var NETCORE_ENVIRONMENT 上的 .NET Core 控制台应用程序 - 必要吗?
.NET Core Console app on Linux env var NETCORE_ENVIRONMENT - necessary?
当 运行 控制台应用程序时,环境变量 NETCORE_ENVIRONMENT=Production
有什么意义吗?
在 asp.net 核心中有 ASPNETCORE_ENVIRONMENT=Production
- 这(据我所知)改变了应用程序以使用 appsettings.Production.json
.
NETCORE_ENVIRONMENT
是否存在,使用它有什么效果?
(大约一年前我在安装 5.0 应用程序时在我的脚本中找到它,现在我在 Google 上找不到它的任何参考)
TL;DR DOTNET_ENVIRONMENT
被 .NET 5 和 6 的控制台应用程序中的 HostBuilder
使用(可能早在 3.x 时)。除此之外,它只是一个常见的环境变量,您还可以使用它来确定环境,以防您想执行以下操作:
if (Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") == "Development")
{
builder.AddUserSecrets<Program>();
}
我相信 .NET 5 & 6 ASPNETCORE_ENVIRONMENT
和 DOTNET_ENVIRONMENT
是有意义的环境变量。如果两者均未设置,则默认为 Production
。当 运行 来自 ASP.NET Core 时 WebApplication.CreateBuilder
将更喜欢 ASPNETCORE_ENVIRONMENT
如果它们都存在。
再补充一点,我不认为默认设置了任何值。我刚刚检查了我的本地 Ubuntu 服务器,上面安装了全新的 .NET 6,这些环境变量不是由安装程序创建的。
以下使用 HostBuilder
,HostingEnvironment
应反映 DOTNET_ENVIRONMENT
的值。它仍然感觉不直观,因为我必须添加 prefix: "DOTNET_"
部分。
class Program
{
static void Main(string[] args)
{
var builder = new HostBuilder();
builder.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables(prefix: "DOTNET_");
});
builder.ConfigureAppConfiguration((context, config) =>
{
Console.WriteLine($"HostBuilder Environment in ConfigureAppConfiguration: {context.HostingEnvironment.EnvironmentName}");
})
.UseDefaultServiceProvider((context, options) =>
{
Console.WriteLine($"HostBuilder Environment in UseDefaultServiceProvider: {context.HostingEnvironment.EnvironmentName}");
});
builder.Build();
}
}
相关:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-6.0
当 运行 控制台应用程序时,环境变量 NETCORE_ENVIRONMENT=Production
有什么意义吗?
在 asp.net 核心中有 ASPNETCORE_ENVIRONMENT=Production
- 这(据我所知)改变了应用程序以使用 appsettings.Production.json
.
NETCORE_ENVIRONMENT
是否存在,使用它有什么效果?
(大约一年前我在安装 5.0 应用程序时在我的脚本中找到它,现在我在 Google 上找不到它的任何参考)
TL;DR DOTNET_ENVIRONMENT
被 .NET 5 和 6 的控制台应用程序中的 HostBuilder
使用(可能早在 3.x 时)。除此之外,它只是一个常见的环境变量,您还可以使用它来确定环境,以防您想执行以下操作:
if (Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT") == "Development")
{
builder.AddUserSecrets<Program>();
}
我相信 .NET 5 & 6 ASPNETCORE_ENVIRONMENT
和 DOTNET_ENVIRONMENT
是有意义的环境变量。如果两者均未设置,则默认为 Production
。当 运行 来自 ASP.NET Core 时 WebApplication.CreateBuilder
将更喜欢 ASPNETCORE_ENVIRONMENT
如果它们都存在。
再补充一点,我不认为默认设置了任何值。我刚刚检查了我的本地 Ubuntu 服务器,上面安装了全新的 .NET 6,这些环境变量不是由安装程序创建的。
以下使用 HostBuilder
,HostingEnvironment
应反映 DOTNET_ENVIRONMENT
的值。它仍然感觉不直观,因为我必须添加 prefix: "DOTNET_"
部分。
class Program
{
static void Main(string[] args)
{
var builder = new HostBuilder();
builder.ConfigureHostConfiguration(config =>
{
config.AddEnvironmentVariables(prefix: "DOTNET_");
});
builder.ConfigureAppConfiguration((context, config) =>
{
Console.WriteLine($"HostBuilder Environment in ConfigureAppConfiguration: {context.HostingEnvironment.EnvironmentName}");
})
.UseDefaultServiceProvider((context, options) =>
{
Console.WriteLine($"HostBuilder Environment in UseDefaultServiceProvider: {context.HostingEnvironment.EnvironmentName}");
});
builder.Build();
}
}
相关:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-6.0