Ricerca…


Avere appettazioni per ambiente

Per ogni ambiente è necessario creare un'app separata. {EnvironmentName} .json files:

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

Quindi aprire il file project.json e includerli in "include" nella sezione "publishOptions". Elenca tutti i file e le cartelle che verranno inclusi durante la pubblicazione:

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

Il passo finale. Nella tua classe di avvio aggiungi:

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

nel costruttore in cui si impostano le fonti di configurazione:

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

Ottieni / Controlla il nome dell'ambiente dal codice

Tutto ciò di cui hai bisogno è una variabile di tipo IHostingEnvironment :

  • ottieni il nome dell'ambiente:

      env.EnvironmentName
    
  • per gli ambienti di Development , gestione Staging e Production predefiniti, il modo migliore è utilizzare i metodi di estensione dalla classe HostingEnvironmentExtensions

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • ignorare correttamente case (un altro metodo di estensione da HostingEnvironmentExtensions :

     env.IsEnvironment("environmentname") 
    
  • variante case sensitive:

     env.EnvironmentName == "Development" 
    

Configurazione di più ambienti

Questo esempio mostra come configurare più ambienti con diversa configurazione di Dependency Injection e middleware separati in una classe di Startup .

Oltre public void Configure(IApplicationBuilder app) e public void ConfigureServices(IServiceCollection services) , è possibile utilizzare i servizi Configure{EnvironmentName} e Configure{EnvironmentName}Services per avere una configurazione dipendente dall'ambiente.

L'uso di questo modello evita di mettere troppo if/else logica con un singolo metodo / classe di Startup e tenerlo pulito e separato.

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

Quando i servizi Configure{Environmentname} o Configure{Environmentname}Services non vengono trovati, rientrano rispettivamente in Configure o ConfigureServices .

La stessa semantica si applica anche alla classe di Startup . StartupProduction verrà utilizzato quando la variabile ASPNETCORE_ENVIRONMENT è impostata su Production e ricadrà Startup quando si tratta di Stagging o di Development

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

Rendi visibile il contenuto specifico per l'ambiente

Potrebbe essere necessario rendere visibile del contenuto, che è specifico solo per alcuni ambienti. Per raggiungere questo obiettivo puoi utilizzare l' helper del tag Environment:

<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>

L'helper del tag Environment eseguirà il rendering solo dei suoi contenuti se l'ambiente corrente corrisponde a uno degli ambienti specificati usando l'attributo names .

Imposta la variabile di ambiente dalla riga di comando

Per impostare l'ambiente per Development

SET ASPNETCORE_ENVIRONMENT=Development

Ora l'esecuzione di un'applicazione Asp.Net Core sarà nell'ambiente definito.

Nota

  1. Non dovrebbe esserci spazio prima e dopo il segno di uguaglianza = .
  2. Il prompt dei comandi non dovrebbe essere chiuso prima di eseguire l'applicazione perché le impostazioni non sono persistenti.

Imposta la variabile di ambiente da PowerShell

Quando si utilizza PowerShell, è possibile utilizzare setx.exe per impostare le variabili di ambiente in modo permanente.

  1. Avvia PowerShell

  2. Digitare uno dei seguenti:

    setx ASPNETCORE_ENVIRONMENT "sviluppo"

    setx ASPNETCORE_ENVIRONMENT "staging"

  3. Riavvia PowerShell

Utilizzo di ASPNETCORE_ENVIRONMENT da web.config

Se non si desidera utilizzare ASPNETCORE_ENVIRONMENT dalle variabili di ambiente e utilizzarlo da web.config dell'applicazione, quindi modificare web.config in questo modo-

<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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow