Saltar al contenido

Aplicación de consola .NET Core, ¿cómo configurar appSettings por entorno?

Esta es la contestación más correcta que encomtrarás aportar, pero primero obsérvala pausadamente y analiza si se adapta a tu proyecto.

Solución:

Así es como lo hacemos en nuestro .netcore aplicación de consola. El key aquí es para incluir el derecho dependencias en su proyecto a saber (puede que no sea todo, verifique según sus necesidades) y copiar a la salida appSetting.json como parte de tu opciones de construcción

  {
    "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();
        var configuration = builder.Build();
        var myConnString= configuration.GetConnectionString("SQLConn");
    

Para aquellos que usan .NET Core versión 2.1.0+ y Microsoft.Extensions.Hosting para alojar su aplicación de consola, pueden usar el siguiente código (de acuerdo con la respuesta de Feiyu Zhou en otro hilo):

var hostBuilder = new HostBuilder()
    .ConfigureHostConfiguration(config =>
    
        if (args != null)
        
            // enviroment from command line
            // e.g.: dotnet run --environment "Staging"
            config.AddCommandLine(args);
        
    )
    .ConfigureAppConfiguration((context, builder) =>
    
        builder.SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json", optional: false)
            .AddJsonFile($"appsettings.context.HostingEnvironment.EnvironmentName.json", optional: true);
    )

Hay dos IHostingEnvironment interfaces que debe utilizar. Uno es para aplicaciones ASP.NET Core, el otro es para aplicaciones de consola .NET Core. Puede 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
    
        /// 
        /// 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") ?? "Production",
                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();
        
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *