2016-09-19 41 views
13

Mam aplikację .NET Core 1.0.0 i dwa środowiska. Muszę być w stanie używać appSettings.dev.json i appSettings.test.json na podstawie zmiennych środowiskowych ustawionych w czasie wykonywania. Wydaje się to być całkiem proste dla aplikacji internetowych ASP.NET Core, poprzez wtrysk zależności i IHostingEnvironment i EnvironmentName env. zmienna, jednak w jaki sposób powinienem podłączyć rzeczy do aplikacji konsoli (poza napisaniem własnego kodu niestandardowego, który używa Microsoft.Framework.Configuration.EnvironmentVariables)?Aplikacja .NET Core Core, jak skonfigurować appSettings na środowisko?

Dziękuję.

Odpowiedz

20

Tak to robimy w naszej aplikacji konsolowej .netcore. Kluczem tutaj jest to prawo zależności w projekcie mianowicie (nie może być wszystko, kontroli opiera się na swoich potrzebach) i skopiować do wyprowadzania appSetting.json jako część buildoptions

{ 
     "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

Dziękuję. Ostatecznie skończyłem używając bardziej zawiłej wersji tego, używając 'new ConfigurationBuilder(). AddEnvironmentVariables()' i znajdując 'ASPNETCORE_ENVIRONMENT'. – user2916547

+0

Wygląda na to, że nie znajduję opcji buildoptions w aplikacji konsoli. – liang

1

można to zrobić dla zmiennej środowiskowej ASP.Net podstawowej (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 } 
} 

Następnie po prostu możesz skorzystać z usługi

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

Pytanie nie dotyczyło rdzenia asp.net. –

+0

Wiem, ale tylko * rzeczy o tym, które są zdalnie związane z rdzeniem asp.net, to nazwa zmiennej środowiskowej i biblioteki rdzeniowej .net używanej do uzyskania stałych łańcuchowych dla "Rozwoju", "Stagingu" i "Produkcji" ". Pomyślałem, że użyteczne byłoby użycie poprawnej zmiennej środowiskowej zamiast jednej, którą wymyśliłem. Może to być wszystko, a nie być w podstawowej aplikacji asp.net. –