2016-09-19 2 views
13

.NET Core 1.0.0 콘솔 응용 프로그램과 두 가지 환경이 있습니다. 나는 런타임에 설정 한 환경 변수에 기초하여 appSettings.dev.jsonappSettings.test.json을 사용할 수 있어야한다. 의존성 주입과 IHostingEnvironment 및 EnvironmentName env를 통해 ASP.NET 코어 웹 응용 프로그램의 경우에는 매우 간단합니다. 변수, 그러나 내가 어떻게 Microsoft.Framework.Configuration.EnvironmentVariables를 사용하여 내 자신의 사용자 정의 코드를 작성 이외의 콘솔 응용 프로그램에 대한 것들을 연결해야합니까?.NET Core 콘솔 응용 프로그램, 환경별로 appSettings를 구성하는 방법은 무엇입니까?

감사합니다.

답변

20

이것은 콘솔 앱 .netcore에서 수행 한 것입니다. 열쇠는 여기에 (, 당신의 필요에 따라 체크 이 모든 일 수 있음) 종속 프로젝트에 즉 권리를 포함하고 buildoptions의 일환으로 출력에 appSetting.json을 복사하는 것입니다

{ 
     "Microsoft.Extensions.Configuration": "1.0.0", 
     "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0", 
     "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0", 
     "Microsoft.Extensions.Configuration.Json": "1.0.0", 
    } 
    "buildOptions": { 
    "emitEntryPoint": true, 
    "copyToOutput": { 
     "include": [ 
     "appsettings*.json", 
     "App*.config" 
       ] 
      } 
}, 

    using Microsoft.Extensions.Configuration; 
    namespace MyApp 
    { 
    public static void Main(string[] args) 
    { 
     var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 


     var builder = new ConfigurationBuilder() 
      .AddJsonFile($"appsettings.json", true, true) 
      .AddJsonFile($"appsettings.{environmentName}.json", true, true) 
      .AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
     var myConnString= Configuration.GetConnectionString("SQLConn"); 
    } 

}

+2

감사합니다. 나는 결국 새로운 ConfigurationBuilder(). AddEnvironmentVariables()를 사용하고'ASPNETCORE_ENVIRONMENT'을 찾아서 좀 더 복잡한 버전을 사용하게되었다. – user2916547

+0

콘솔 앱에서 buildoptions를 찾지 못하는 것 같습니다. – liang

1

당신은 ASP.Net 코어 환경 변수에 대해이 작업을 수행 할 수 있습니다 (ASPNETCORE_ENVIRONMENT) : -

using Microsoft.AspNetCore.Hosting; 
using System; 

public class Program { 
    private static string HostingEnvironment => Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 
    private static bool IsEnvironment(string environmentName) => HostingEnvironment?.ToLower() == environmentName?.ToLower() && null != environmentName; 

    private static bool Development => IsEnvironment(EnvironmentName.Development); 
    private static bool Production => IsEnvironment(EnvironmentName.Production); 
    private static bool Staging => IsEnvironment(EnvironmentName.Staging); 

    public static void Main(string[] args) { // Your code here } 
} 

다음 당신은 단순히 재산을 사용할 수 있습니다

public static void Main(string[] args) { 
     if (Development){ 
      // Blow up the planet 
     } 
    } 
+0

질문에 대한 asp.net 핵심 아니었다. –

+0

나도 알아,하지만 원격으로 asp.net 핵심 관련이 * 유일한 * 것들은 환경 변수의 이름과 '개발', '스테이징'& '생산을위한 문자열 상수를 얻는 데 사용되는. NET 코어 라이브러리입니다 '. 나는 합법적 인 환경 변수를 사용하는 것이 유용 할 것이라고 생각했다. 그것은 아무것도 될 수 asp.net 핵심 응용 프로그램에서 전혀되지 않을 수 있습니다. –

관련 문제