2016-10-06 11 views
2

我々は、次のコードを使用している:DOTNETコア - 同じサーバー上のアプリケーション(プロセス)あたりの環境変数

if(env.IsDevelopment()) 
{ 
    app.UseDeveloperExceptionPage(); 
} 

ローカルおよび生産で開発する場合これは素晴らしい作品が、我々は我々のCI/QAに問題がありますそれらは同じサーバー上に配置されています。

このようなことを指定できますが、アプリケーションごとに環境変数を設定するにはどうすればよいですか。 CIとQAが異なるサーバー上にあった場合、これは簡単に解決できます。

if(env.IsEnvironment("CI")) 
{ 
    app.UseDeveloperExceptionPage(); 
} 

は、我々はまた、appsettings.ci.jsonappsettings.qa.jsonなどの環境ごとに固有のappsettings.jsonを持っているしたいと私は、これは、環境変数を箱から出して動作することを知っています。

私はそれがアプリケーション(プロセス)ごとに環境変数を指定する方法でなければならないと確信しています、私はちょうどどのようにわからないのですか? :)

私たちはアプリケーションをホストするためにIISを使用しています。

+0

環境変数は、私が推測_per PROCESS_DIRECTORYで、何であるかをされますとにかく欲しかったです(CIとQAは同じアプリケーションですが、異なるプロセスです)。ただし、両方のプロセスが同じ親プロセス(IIS)を持ち、同じ環境変数を継承するという問題があります。 – MSalters

答えて

2

私はドットネットコアスラックチャンネルの@davidfowlから助けを得ました。

ソリューションは

<environmentVariables> 
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" /> 
    <environmentVariable name="AnotherVariable" value="My Value" /> 
</environmentVariables> 

は、だから私のweb.configはこのようになりますあなたのweb.configファイルにaspNetCoreセクションに以下を追加することです:

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"> 
    <environmentVariables> 
     <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="QA" /> 
     <environmentVariable name="AnotherVariable" value="My Value" /> 
    </environmentVariables> 
</aspNetCore> 
1

env.EnvironmentNameに値を上書きすることができます。パブリックセッターがあるため、アプリケーションごとに特定の環境変数グループのみを使用することができます。 2つの変数、app1とapp2のそれぞれAPP1_OWNENVIRONMENT = "QA"APP2_OWNENVIRONMENT = "CI"などがあります。

  1. あなたが.AddEnvironmentVariables()メソッドを呼び出すことで、環境変数のサポートを追加すると、特別な接頭辞なしですべての変数を無視するようにフィルタを指定することが可能です。 IsDevelopment()のような例えば

    // APP1_ is the prefix that environment variable names must start with. 
        var config = new ConfigurationBuilder() 
         .AddCommandLine(args) 
         .AddEnvironmentVariables(prefix: "APP1_") 
         .Build(); 
    
        env.EnvironmentName = config.GetValue<string>("OWNENVIRONMENT")}; 
    
        // here env.EnvironmentName has "QA" value so the appsettings.qa.json will be used 
        var builder = new ConfigurationBuilder() 
         .SetBasePath(env.ContentRootPath) 
         .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); 
    
  2. 方法、IsStaging()が一般的IsEnvironment方法オーバーラッパーいるIHostingEnvironmentのためだけextension methodsです:だからあなたが類推することにより、独自のIsQA()拡張メソッドを

    public static bool IsDevelopment(this IHostingEnvironment hostingEnvironment) 
    { 
        if (hostingEnvironment == null) 
        { 
         throw new ArgumentNullException(nameof(hostingEnvironment)); 
        } 
    
        return hostingEnvironment.IsEnvironment(EnvironmentName.Development); 
    } 
    

を作成することができます、またはenv.IsEnvironment("QA")に直接電話してください。

+0

あなたの答えをありがとう、私は@ davidfowlの助けを借りてweb.configで解決することができました。私の答えを見てください。 – JOSEFtw

関連する問題