2016-09-19 72 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核心应用程序中。 –

相关问题