使用dnx运行我的ASP.NET核心应用程序我能够从命令行设置环境变量,然后像这样运行它:
set ASPNET_ENV = Production
dnx web
在1.0中使用相同的方法:
set ASPNETCORE_ENVIRONMENT = Production
dotnet run
不起作用 - 该应用程序似乎无法读取环境变量。
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
返回null
我错过了什么?
答案 0 :(得分:77)
您的问题是=
周围的空格。
这将有效:
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT "));
或删除空格:
set ASPNETCORE_ENVIRONMENT=Production
答案 1 :(得分:6)
这应该是this answer对@Dmitry的评论(但是太长了,因此我将其作为单独的答案发布):
您不希望使用'ASPNETCORE_ENVIRONMENT '
(带尾随空格) - aspnet核心中的功能取决于'ASPNETCORE_ENVIRONMENT'
的值(无尾随空格) - 例如解析appsettings.Development.json
vs appsettings.Production.json
。 (例如,请参阅Working with multiple environments docs article
Ans我想如果你想纯粹保持在aspnet核心范式内,你需要使用IHostingEnvironment.Environment
(参见docs)属性,而不是直接从Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
读取(虽然fromer当然是从后者设定的)。例如。在Startup.cs
public class Startup
{
//<...>
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
Console.WriteLine("HostingEnvironmentName: '{0}'", env.EnvironmentName);
//<...>
}
//<...>
}