Sök…


Att ha inställningar per miljö

För varje miljö måste du skapa en separat inställning. {Miljönamn} .json-filer:

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

Öppna sedan projekt.json-filen och inkludera dem i "inkludera" i avsnittet "publicOptions". Här listas alla filer och mappar som kommer att inkluderas när du publicerar:

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

Det sista steget. Lägg till i din startklasse:

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

i konstruktör där du ställer in konfigureringskällor:

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

Hämta / kontrollera miljönamnet från koden

Allt du behöver är en variabel av typen IHostingEnvironment :

  • få miljönamn:

      env.EnvironmentName
    
  • för fördefinierade Development , Staging , Production det bästa sättet att använda förlängningsmetoder från HostingEnvelopeExtensions- klassen

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • ignorera korrekt fall (en annan förlängningsmetod från HostingEnvelopeExtensions :

     env.IsEnvironment("environmentname") 
    
  • skiftlägeskänslig variant:

     env.EnvironmentName == "Development" 
    

Konfigurera flera miljöer

Detta exempel visar hur du konfigurerar flera miljöer med olika beroende-injektionskonfiguration och separata mellanvaror i en Startup .

Förutom public void Configure(IApplicationBuilder app) och public void ConfigureServices(IServiceCollection services) -metoder kan man använda Configure{EnvironmentName} och Configure{EnvironmentName}Services att ha miljöberoende konfiguration.

Genom att använda detta mönster undviks att lägga till mycket if/else logik med en enda metod / Startup klass och hålla den ren och åtskild.

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

När en Configure{Environmentname} eller Configure{Environmentname}Services inte hittas, faller den tillbaka till Configure respektive ConfigureServices tjänster.

Samma semantik gäller också för Startup klassen. StartupProduction kommer att användas när ASPNETCORE_ENVIRONMENT variabeln är inställd på Production och kommer att falla tillbaka till Startup när det är Stagging eller Development

Ett komplett exempel:

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

Ge miljöspecifikt innehåll i vyn

Du kan behöva återge något innehåll i vyn, vilket är specifikt för en viss miljö. För att uppnå detta mål kan du använda Hjälp för miljömärkning :

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

Miljö tag hjälpare kommer bara göra sitt innehåll, om den aktuella miljön matchar en av de miljöer anges med names attribut.

Ställ in miljövariabel från kommandoraden

Att ställa in miljön till Development

SET ASPNETCORE_ENVIRONMENT=Development

Nu körs en Asp.Net Core-applikation i den definierade miljön.

Notera

  1. Det bör inte finnas utrymme före och efter jämställdhetstecknet = .
  2. Kommandotolken ska inte stängas innan programmet körs eftersom inställningarna inte kvarstår.

Ställ in miljövariabel från PowerShell

När du använder PowerShell kan du använda setx.exe för att ställa in miljövariabler permanent.

  1. Starta PowerShell

  2. Skriv en av följande:

    setx ASPNETCORE_ENVIRONMENT "utveckling"

    setx ASPNETCORE_ENVIRONMENT "iscensättning"

  3. Starta om PowerShell

Använda ASPNETCORE_ENVIRONMENT från web.config

Om du inte vill använda ASPNETCORE_ENVIRONMENT från miljövariabler och använda den från web.config i din applikation, ändra web.config så här-

<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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow