使用 DNX 运行我的 ASP.NET Core 应用程序,我能够从命令行设置环境变量,然后像这样运行它:
set ASPNET_ENV = Production
dnx web
在 1.0 中使用相同的方法:
set ASPNETCORE_ENVIRONMENT = Production
dotnet run
不起作用 - 应用程序似乎无法读取环境变量。
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
返回空
我错过了什么?
您的问题是 =
周围的空格。
这将起作用(在结束报价之前注意空格):
Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT "));
此代码中 ASPNETCORE_ENVIRONMENT
后的空格不是错字!问题中的问题是有额外的空间(在 SET... 中),因此您必须在 GetEnvironmentVariable() 中使用相同的空间。
如 Isantipov in a comment 所述,更好的解决方案是从 SET 命令中完全删除空格:
set ASPNETCORE_ENVIRONMENT=Production
这实际上应该是 @Dmitry 对 this answer 的评论(但它太长了,因此我将其作为单独的答案发布):
您不想使用 'ASPNETCORE_ENVIRONMENT '
(带有尾随空格) - ASP.NET Core 中的某些功能取决于 'ASPNETCORE_ENVIRONMENT'
的值(无尾随空格) - 例如解析 appsettings.Development.json
与 appsettings.Production.json
. (例如参见Working with multiple environments documentation article
而且我猜如果你想完全停留在 ASP.NET Core 范式中,你会想使用 IHostingEnvironment.Environment
(参见 documentation)属性而不是直接从 Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")
读取(尽管前者当然是从后者设置)。例如在 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);
//<...>
}
//<...>
}
Startup.cs
中的Environment.GetEnvironmentVariable
吗?我正在寻找一个特定的机器值
如果您在开发期间在运行时创建环境变量,那么您每次都会得到 null。您必须重新启动 Visual Studio,因为 VS 仅在启动时读取 EV。
不定期副业成功案例分享
launchSettings
(从VS),或在 Azure 中运行时进行 WebApp 配置。=
符号或空格 ` ` 作为环境变量值的一部分,会发生什么?我们应该如何分配/获取那些?set myvar=bla=bla bla
,然后运行echo %myvar%
- 您将看到bla=bla bla