94

使用DNX运行我的 ASP.NET Core 应用程序,我能够从命令行设置环境变量,然后像这样运行它:

set ASPNET_ENV = Production
dnx web

在 1.0 中使用相同的方法:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

不起作用 - 应用程序似乎无法读取环境变量。

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));

返回空

我错过了什么?

4

3 回答 3

152

你的问题是周围的空间=

这将起作用(在结束报价之前注意空格):

Console.WriteLine(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT "));

这段代码后面的空格ASPNETCORE_ENVIRONMENT不是错字!问题中的问题是有额外的空间(在 SET...中),所以您必须在 GetEnvironmentVariable() 中使用相同的空间。

正如Isantipov 在评论中指出的那样,更好的解决方案是从 SET 命令中完全删除空格:

set ASPNETCORE_ENVIRONMENT=Production
于 2016-05-23T09:40:31.073 回答
23

这确实应该是@Dmitry对此答案的评论(但它太长了,因此我将其作为单独的答案发布):

您不想使用'ASPNETCORE_ENVIRONMENT '(带有尾随空格) - ASP.NET Core 中有一些功能取决于'ASPNETCORE_ENVIRONMENT'(无尾随空格)的值 - 例如解析appsettings.Development.jsonvs appsettings.Production.json. (例如,请参阅使用多个环境文档文章

而且我猜如果你想完全停留在 ASP.NET Core 范式中,你会想使用IHostingEnvironment.Environment(参见文档)属性而不是直接读取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);
        //<...>
    }

    //<...>
}
于 2017-12-19T10:23:49.177 回答
2

如果您在开发期间在运行时创建环境变量,那么您每次都会得到 null。您必须重新启动 Visual Studio,因为 VS 仅在启动时读取 EV。

于 2022-01-27T23:44:13.903 回答