asp.net-core                
            Configurazione di più ambienti
        
        
            
    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- Staginge- Productionpredefiniti, 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
-  Non dovrebbe esserci spazio prima e dopo il segno di uguaglianza =.
- 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.
- Avvia PowerShell 
- Digitare uno dei seguenti: - setx ASPNETCORE_ENVIRONMENT "sviluppo" - setx ASPNETCORE_ENVIRONMENT "staging" 
- 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>