Buscar..


Tener apariciones por entorno

Para cada entorno, debe crear una configuración de aplicaciones separada. {EnvironmentName} .json files:

  • appsettings.Development.json
  • appsettings.Staging.json
  • appsettings.Production.json

Luego abra el archivo project.json e inclúyalos en "incluir" en la sección "publishOptions". Esto enumera todos los archivos y carpetas que se incluirán cuando publique:

"publishOptions": {
  "include": [
    "appsettings.Development.json",
    "appsettings.Staging.json",
    "appsettings.Production.json"
    ... 
  ]
}

El paso final. En su clase de inicio agregue:

.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

en el constructor donde configuras las fuentes de configuración:

var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();

Obtener / verificar el nombre del entorno desde el código

Todo lo que necesita es una variable de tipo IHostingEnvironment :

  • obtener el nombre del entorno:

      env.EnvironmentName
    
  • para predefinida Development , Staging , Production entornos de la mejor manera es utilizar métodos de extensión de HostingEnvironmentExtensions clase

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • ignorar correctamente el caso (otro método de extensión de HostingEnvironmentExtensions :

     env.IsEnvironment("environmentname") 
    
  • variante sensible a mayúsculas y minúsculas:

     env.EnvironmentName == "Development" 
    

Configurando múltiples entornos

Este ejemplo muestra cómo configurar múltiples entornos con diferentes configuraciones de inyección de dependencia y middlewares separados en una clase de Startup .

Junto con public void Configure(IApplicationBuilder app) y public void Configure(IApplicationBuilder app) public void ConfigureServices(IServiceCollection services) se pueden usar Configure{EnvironmentName} y Configure{EnvironmentName}Services para tener una configuración dependiente del entorno.

El uso de este patrón evita poner mucha lógica if/else dentro de un solo método / clase de Startup y mantenerlo limpio y separado.

public class Startup
{
    public void ConfigureServices(IServiceCollection services) { }
    public void ConfigureStaggingServices(IServiceCollection services) { }
    public void ConfigureProductionServices(IServiceCollection services) { }
    
    public void Configure(IApplicationBuilder app) { }
    public void ConfigureStagging(IApplicationBuilder app) { }
    public void ConfigureProduction(IApplicationBuilder app) { }
}

Cuando no se encuentran los Configure{Environmentname}Services Configure{Environmentname} o Configure{Environmentname}Services , volverá a Configure o ConfigureServices respectivamente.

La misma semántica también se aplica a la clase de Startup . StartupProduction será utilizado cuando el ASPNETCORE_ENVIRONMENT variable se establece en Production y se caerá de nuevo a Startup cuando es Stagging o Development

Un ejemplo completo:

public class Startup
{
    public Startup(IHostingEnvironment hostEnv)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .SetBasePath(hostEnv.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true);

        if (hostEnv.IsDevelopment())
        {
            // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
            builder.AddApplicationInsightsSettings(developerMode: true);
        }

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; set; }

    // This method gets called by the runtime. Use this method to add services to the container
    public static void RegisterCommonServices(IServiceCollection services) 
    {
        services.AddScoped<ICommonService, CommonService>();
        services.AddScoped<ICommonRepository, CommonRepository>();
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        RegisterCommonServices(services);
        
        services.AddOptions();
        services.AddMvc();
    }

    public void ConfigureDevelopment(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();

        app.UseApplicationInsightsRequestTelemetry();
        app.UseApplicationInsightsExceptionTelemetry();
        app.UseStaticFiles();
        app.UseMvc();
    }

    // No console Logger and debugging tools in this configuration
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddDebug();

        app.UseApplicationInsightsRequestTelemetry();
        app.UseApplicationInsightsExceptionTelemetry();
        app.UseStaticFiles();
        app.UseMvc();
    }
}

Representar contenido específico del entorno a la vista

Es posible que tenga que mostrar cierto contenido a la vista, que es específico de un entorno solamente. Para lograr este objetivo, puede utilizar el ayudante de etiqueta de entorno:

<environment names="Development">
    <h1>This is heading for development environment</h1>
</environment>
<environment names="Staging,Production">
    <h1>This is heading for Staging or production environment</h1>
</environment>

El ayudante de la etiqueta Entorno solo representará su contenido si el entorno actual coincide con uno de los entornos especificados utilizando el atributo de names .

Establecer la variable de entorno desde la línea de comando

Establecer el entorno para el Development

SET ASPNETCORE_ENVIRONMENT=Development

Ahora, ejecutar una aplicación Asp.Net Core estará en el entorno definido.

Nota

  1. No debe haber espacio antes y después del signo de igualdad = .
  2. El símbolo del sistema no debe cerrarse antes de ejecutar la aplicación porque la configuración no se mantiene.

Establecer variable de entorno desde PowerShell

Cuando use PowerShell, puede usar setx.exe para establecer variables de entorno de forma permanente.

  1. Iniciar PowerShell

  2. Escriba uno de los siguientes:

    setx ASPNETCORE_ENVIRONMENT "desarrollo"

    setx ASPNETCORE_ENVIRONMENT "puesta en escena"

  3. Reinicie PowerShell

Usando ASPNETCORE_ENVIRONMENT desde web.config

Si no desea utilizar ASPNETCORE_ENVIRONMENT de las variables de entorno y utilizarlo desde web.config de su aplicación, modifique web.config como este:

<aspNetCore processPath=".\WebApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
  </environmentVariables>
</aspNetCore>


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow