2016-10-06 6 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_, 무엇을 당신 어쨌든 원했고 (CI와 QA는 동일한 애플리케이션이지만 다른 프로세스). 그러나 두 프로세스 모두 동일한 상위 프로세스 (IIS)를 가지므로 동일한 환경 변수를 상속합니다. – MSalters

답변

2

나는 dotnet core slack 채널에서 @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은 공개 설정자이므로 값을 무시할 수 있으며 응용 프로그램마다 특정 환경 변수 그룹 만 사용할 수 있습니다. 두 변수는 app1과 app2 각각 APP1_OWNENVIRONMENT = "QA", APP2_OWNENVIRONMENT = "CI"과 같습니다. 당신이 .AddEnvironmentVariables() 메서드를 호출하여 환경 변수 지원을 추가 할 때

  1. , 특별한 접두사없이 모든 변수를 무시하는 필터를 지정할 수 있습니다. 예를

    // 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. 방법 IsDevelopment() 같은 경우, IsStaging()는 그냥 일반 IsEnvironment 방법을 통해 래퍼 IHostingEnvironment에 대한 extension methods :

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

그래서 당신은 비유하여 자신의 IsQA() 확장 메서드를 만들 수는 또는 env.IsEnvironment("QA")으로 직접 전화하십시오.

+0

답변을 주셔서 감사합니다. @davidfowl의 도움을 받아 web.config를 사용하여 문제를 해결했습니다. 내 대답을 보라. – JOSEFtw

관련 문제