2016-10-17 5 views
5

私はステージングサーバーに2つのWebサイトを持ち、どちらもIISで動作するAsp.netコアサイトです。私は環境変数ASPNETCORE_ENVIRONMENTStagingに設定しました。これはサイトのいずれかでうまく動作しますが、もう一方は変数を無視して代わりにプロダクションモードで実行します。ステージングモードで実行するには、ホスト環境をweb.configファイルに構成する必要があります。Asp.Netコアホスティング環境変数

1つのサイトが環境変数を考慮しない理由についてのヒントはありますか?

EDIT:私のStartup(IHostingEnvironment env)コンストラクタの両方で 、私は環境変数を使用します。

public Startup(IHostingEnvironment env) 
{ 
    var builder = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddJsonFile("logging.json") 
     .AddEnvironmentVariables(); // <--- 
     Configuration = builder.Build(); 
    } 
+0

2回目のチェックでASPNETCORE_ENVIRONMENT = Stagingを実行しますが、env.EnvironmentNameが "Production"を返し、appsettings.Staging.jsonの値は使用されていませんか?ところで、appsettings.Staging.jsonファイルを公開することを忘れないでください。 – Set

+0

いずれのサイトでも 'appsettings.Staging.json'は使用しません。 ASPNETCORE_ENVIRONMENTはマシン全体に設定されています。 2番目のサイトログの起動ログ: "環境:生産" – Thaoden

+0

Environment.GetEnvironmentVariable( "ASPNETCORE_ENVIRONMENT")が返すものを確認できますか? – Set

答えて

6

this similar questionで述べたように、このトリックは単純に、ユーザー変数(IIS - >サーバー - >アプリケーションプール - >プールを右クリック - >アプリケーションプールのデフォルトを設定... - >ロードユーザープロファイル= True)。

私はそれに応じてアプリケーションプールを1つだけ設定しました。したがって、サイトの1つだけが環境変数にアクセスできます。

+0

私はこれに似た問題を試してみましたが、それは私にとっては解決しません。 – Sam

+0

Load User Profileも私のために働いていました。ありがとうございました。 – joey

-3
public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 

     if (env.IsDevelopment()) 
     { 
      // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709 
      builder.AddUserSecrets(); 
     } 

     builder.AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

あなたは、変数builder.AddEnvironmentVariables();

+0

私はこれをチェックしましたが、両方のプロジェクトにあります。 – Thaoden

+0

AddEnvironmentVariables()はenv.EnvironmentNameの値を変更しません。これは、環境変数からの読み取り構成値を許可します。 – Set

+0

'IsDevelopment()'は 'AddEnvironmentVariables()'なしで動作しますか? – Thaoden

4

を追加していない可能性があり、私はちょうどを扱う最後の数時間を過ごしました同じ問題。 2つのアプリケーションのうちの1つが動作しているように見えるので、結果が同じになるかどうかはわかりません。

Windows Server 2008 R2の「高度なシステム設定」を使用してASPNETCORE_ENVIRONMENTをシステム変数として「ステージング」に設定し、常に「実動」環境で終了しました。どこにでも設定できます)。

コマンドプロンプトから "set"を使用すると、 "ASPNETCORE_ENVIRONMENT = Staging"の予期された結果が示されました。

Calling Environment.GetEnvironmentVariable( "ASPNETCORE_ENVIRONMENT")がnullを返しました。私はnullを返した "Test"という別の変数を作成しました。他の既存の変数を呼び出すと、期待どおりの結果が返されました。

アプリケーションプールのリサイクル、アプリケーションプールのユーザーの変更、管理コンソールからのIISの再起動、World Wide Web発行サービスの再起動(おそらくIIS mgmtコンソールでのリセットと同じ)などはすべて役に立たなかった。

予期した結果を返すためにアプリケーションを取得できる唯一の方法は、サーバーをリブートすることでした。