visual tutorial studio para new net dotnet configurar code application c# console-application .net-core

c# - tutorial - Aplicación de consola.NET Core, ¿cómo configurar la configuración de aplicaciones por entorno?



net core visual basic (3)

Así es como lo hacemos en nuestra aplicación de consola .netcore . La clave aquí es incluir las dependencias correctas en su proyecto, a saber ( puede que no lo sea todo, verifique en función de sus necesidades ) y copie para generar el archivo appSetting.json como parte de sus opciones de construcción.

{ "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"); }

}

Tengo una aplicación de consola .NET Core 1.0.0 y dos entornos. Necesito poder usar appSettings.dev.json y appSettings.test.json función de las variables de entorno que establezca en el tiempo de ejecución. Esto parece ser bastante sencillo para las aplicaciones web ASP.NET Core, a través de la inyección de dependencias y IHostingEnvironment y el entorno EnvironmentName. Sin embargo, ¿cómo debo conectar las cosas para la aplicación de la consola (además de escribir mi propio código personalizado que usa Microsoft.Framework.Configuration.EnvironmentVariables )?

Gracias.


Hay dos interfaces IHostingEnvironment que debe utilizar. Uno es para las aplicaciones principales de ASP.NET, el otro es para las aplicaciones de consola central .NET. Puedes usar este ejemplo de código para ambos:

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 { /// <summary> /// Use for ASP.NET Core Web applications. /// </summary> /// <param name="config"></param> /// <param name="env"></param> /// <returns></returns> public static IConfigurationBuilder Configure(IConfigurationBuilder config, IHostingEnvironment env) { return Configure(config, env.EnvironmentName); } /// <summary> /// Use for .NET Core Console applications. /// </summary> /// <param name="config"></param> /// <param name="env"></param> /// <returns></returns> 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(); } /// <summary> /// Use for .NET Core Console applications. /// </summary> /// <returns></returns> 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(); } } }


Puede hacer esto para la variable de entorno Core de 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 } }

Entonces simplemente puede utilizar la propiedad

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