2016-09-19 106 views
13

我有一個.NET核心1.0.0控制檯應用程序和兩個環境。基於我在運行時設置的環境變量,我需要能夠使用appSettings.dev.jsonappSettings.test.json。對於ASP.NET Core Web應用程序,這似乎是非常直接的,通過依賴注入和IHostingEnvironment以及EnvironmentName env。變量,但是我應該如何爲控制檯應用程序進行連接(除了編寫使用Microsoft.Framework.Configuration.EnvironmentVariables的自定義代碼之外)?.NET Core控制檯應用程序,如何爲每個環境配置appSettings?

謝謝。

回答

20

這就是我們在我們的.netcore控制檯應用程序中所做的。這裏的關鍵在於,(,請根據您的需求可能不是全部)依賴你的項目即權和複製到輸出appSetting.json爲您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

謝謝。我最終最終使用了一個更復雜的版本,使用'新的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核心應用程序中。 –

相關問題