Applicazione della console Core di .NET, come configurare appSettings per ambiente?

Ho un’applicazione di console .NET Core 1.0.0 e due ambienti. Devo essere in grado di utilizzare appSettings.dev.json e appSettings.test.json base alle variabili di ambiente impostate in fase di esecuzione. Questo sembra essere abbastanza semplice per le applicazioni Web ASP.NET Core, tramite l’integrazione delle dipendenze e IHostingEnvironment e EnvironmentName env. variabile, tuttavia come devo colbind le cose per l’applicazione della console (oltre a scrivere il mio codice personalizzato che utilizza Microsoft.Framework.Configuration.EnvironmentVariables )?

Grazie.

Ecco come lo facciamo nella nostra app .netcore console. La chiave qui è quella di includere le giuste dipendenze sul tuo progetto e cioè ( potrebbe non essere tutto, controllare in base alle tue esigenze ) e copiare per stampare appSetting.json come parte delle tue 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"); } 

}

Puoi farlo per variabile d’ambiente 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 } } 

Quindi puoi semplicemente usare la proprietà

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

Esistono due interfacce IHostingEnvironment che è necessario utilizzare. Uno è per le applicazioni ASP.NET Core, l’altro è per le applicazioni .NET Core Console. Puoi utilizzare questo esempio di codice per entrambi:

 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(); } } }