Zoeken…


Apps-instellingen hebben per omgeving

Voor elke omgeving moet u afzonderlijke appsettings maken. {EnvironmentName} .json-bestanden:

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

Open vervolgens het project.json-bestand en neem ze op in "include" in de sectie "publishOptions". Hierin staan alle bestanden en mappen die worden opgenomen wanneer u publiceert:

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

De laatste stap. Voeg in uw Startup-klasse het volgende toe:

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

in constructor waar u configuratiebronnen instelt:

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

Haal / controleer omgevingsnaam van code

Het enige dat u nodig hebt is een variabele van type IHostingEnvironment :

  • haal omgevingsnaam op:

      env.EnvironmentName
    
  • voor vooraf gedefinieerde Development , Staging en Production de beste manier om uitbreidingsmethoden van de klasse HostingEnvironmentExtensions te gebruiken

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • negeer case correct (een andere uitbreidingsmethode van HostingEnvironmentExtensions :

     env.IsEnvironment("environmentname") 
    
  • hoofdlettergevoelige variant:

     env.EnvironmentName == "Development" 
    

Meerdere omgevingen configureren

Dit voorbeeld laat zien hoe meerdere omgevingen met verschillende configuratie van afhankelijkheidsinjectie en afzonderlijke middlewares in één Startup geconfigureerd.

Naast de public void Configure(IApplicationBuilder app) en de public void ConfigureServices(IServiceCollection services) methoden kan men Configure{EnvironmentName} en Configure{EnvironmentName}Services voor een omgevingsafhankelijke configuratie.

Het gebruik van dit patroon voorkomt dat er teveel if/else logica wordt gebruikt binnen één enkele methode / Startup en houdt deze schoon en gescheiden.

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

Wanneer een Configure{Environmentname} of Configure{Environmentname}Services niet wordt gevonden, valt dit terug naar respectievelijk Configure of ConfigureServices .

Dezelfde semantiek is ook van toepassing op de Startup klasse. StartupProduction zal worden gebruikt wanneer de variabele ASPNETCORE_ENVIRONMENT is ingesteld op Production en terugvalt naar Startup wanneer deze Stagging of Development

Een compleet voorbeeld:

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

Geef omgevingsspecifieke inhoud weer in het zicht

Mogelijk moet u bepaalde inhoud weergeven die specifiek is voor een bepaalde omgeving. Om dit doel te bereiken kunt u de omgevingstaghelper gebruiken :

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

De omgevingstag helpt de inhoud alleen als de huidige omgeving overeenkomt met een van de omgevingen die zijn opgegeven met het kenmerk names .

Stel omgevingsvariabele in vanaf opdrachtregel

De omgeving instellen op Development

SET ASPNETCORE_ENVIRONMENT=Development

Nu wordt een Asp.Net Core-toepassing uitgevoerd in de gedefinieerde omgeving.

Notitie

  1. Er moet geen spatie zijn voor en na het gelijkheidsteken = .
  2. De opdrachtprompt mag niet worden gesloten voordat de toepassing wordt uitgevoerd, omdat de instellingen niet worden behouden.

Stel omgevingsvariabele in vanuit PowerShell

Wanneer u PowerShell gebruikt, kunt u setx.exe gebruiken om omgevingsvariabelen permanent in te stellen.

  1. Start PowerShell

  2. Typ een van de volgende:

    setx ASPNETCORE_ENVIRONMENT "ontwikkeling"

    setx ASPNETCORE_ENVIRONMENT "enscenering"

  3. Start PowerShell opnieuw

ASPNETCORE_ENVIRONMENT gebruiken van web.config

Als u ASPNETCORE_ENVIRONMENT van omgevingsvariabelen niet wilt gebruiken en wilt gebruiken van web.config van uw toepassing, wijzigt u web.config als volgt:

<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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow