.NET Core控制台应用程序,如何为每个环境配置appSettings?

我有一个.NET Core 1.0.0控制台应用程序和两个环境。 我需要能够根据我在运行时设置的环境变量使用appSettings.dev.jsonappSettings.test.json 。 对于ASP.NET Core Web应用程序来说,这似乎非常简单,通过dependency injection和IHostingEnvironment以及EnvironmentName env。 变量,但是我应该如何为控制台应用程序连接(除了编写我自己的使用Microsoft.Framework.Configuration.EnvironmentVariables的自定义代码)?

谢谢。

这就是我们在.netcore控制台应用中的.netcore 。 这里的关键是在项目中包含正确的依赖项可能不是全部,根据您的需要进行检查 )并复制以输出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"); } 

}

您可以为ASP.Net Core环境变量(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 } } 

您应该使用两个IHostingEnvironment接口。 一个用于ASP.NET核心应用程序,另一个用于.NET核心控制台应用程序。 您可以将以下代码示例用于:

 using System; using System.IO; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Hosting.Internal; namespace MyApplication.Common { public static class ConfigurationFactory { ///  /// Use for ASP.NET Core Web applications. ///  ///  ///  ///  public static IConfigurationBuilder Configure(IConfigurationBuilder config, IHostingEnvironment env) { return Configure(config, env.EnvironmentName); } ///  /// Use for .NET Core Console applications. ///  ///  ///  ///  private static IConfigurationBuilder Configure(IConfigurationBuilder config, Microsoft.Extensions.Hosting.IHostingEnvironment env) { return Configure(config, env.EnvironmentName); } private static IConfigurationBuilder Configure(IConfigurationBuilder config, string environmentName) { return config .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); } ///  /// Use for .NET Core Console applications. ///  ///  public static IConfiguration CreateConfiguration() { var env = new HostingEnvironment { EnvironmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"), ApplicationName = AppDomain.CurrentDomain.FriendlyName, ContentRootPath = AppDomain.CurrentDomain.BaseDirectory, ContentRootFileProvider = new PhysicalFileProvider(AppDomain.CurrentDomain.BaseDirectory) }; var config = new ConfigurationBuilder(); var configured = Configure(config, env); return configured.Build(); } } }