web-dev-qa-db-ja.com

ASP .NET Core読み取り環境変数

Dnxを使用してASP.NET Core-appを実行すると、コマンドラインから環境変数を設定し、次のように実行できました。

set ASPNET_ENV = Production
dnx web

1.0で同じアプローチを使用:

set ASPNETCORE_ENVIRONMENT = Production
dotnet run

動作しません-アプリは環境変数を読み取ることができないようです。

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

nullを返します

私は何が欠けていますか?

45
severin

問題は=の周りのスペースです。

これは動作します:

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

または、スペースを削除します(以下の@Isantipovのコメントを参照)。

set ASPNETCORE_ENVIRONMENT=Production
88
Dmitry

これは本当に this answer by @ Dmitry へのコメントであるはずです(しかし長すぎるので、別の回答として投稿します):

'ASPNETCORE_ENVIRONMENT '(末尾スペース付き)を使用したくない場合-'ASPNETCORE_ENVIRONMENT'(末尾スペースなし)の値に依存するaspnetコアの機能があります。 appsettings.Development.jsonappsettings.Production.jsonの解決。 (例: Working with multiple environment docs article を参照してください

また、純粋にaspnetコアパラダイム内にとどまる場合は、Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")から直接読み取るのではなく、IHostingEnvironment.Environmentdocs を参照)プロパティを使用する必要があります(ただし、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);
        //<...>
    }

    //<...>
}
9
Isantipov