Szukaj…


Posiadanie ustawień dla środowiska

Dla każdego środowiska musisz utworzyć osobne ustawienia. Pliki {EnvironmentName} .json:

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

Następnie otwórz plik project.json i dołącz go do sekcji „uwzględnij” w sekcji „publikujOpcje”. Zawiera listę wszystkich plików i folderów, które zostaną uwzględnione podczas publikowania:

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

Ostatni krok. W klasie Startup dodaj:

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

w konstruktorze, w którym konfigurujesz źródła konfiguracji:

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

Pobierz / sprawdź nazwę środowiska z kodu

Wszystko czego potrzebujesz to zmienna typu IHostingEnvironment :

  • pobierz nazwę środowiska:

      env.EnvironmentName
    
  • zaprogramowanej Development , Staging , Production środowisk najlepszym sposobem jest użycie metod Extension z HostingEnvironmentExtensions klasie

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • poprawnie zignoruj wielkość liter (inna metoda rozszerzenia z HostingEnvironmentExtensions :

     env.IsEnvironment("environmentname") 
    
  • wariant z rozróżnianiem wielkości liter:

     env.EnvironmentName == "Development" 
    

Konfigurowanie wielu środowisk

Ten przykład pokazuje, jak skonfigurować wiele środowisk z różnymi konfiguracjami Wstrzykiwania zależności i osobnymi programami pośrednimi w jednej klasie Startup .

Oprócz public void Configure(IApplicationBuilder app) i public void ConfigureServices(IServiceCollection services) można użyć funkcji Configure{EnvironmentName} i Configure{EnvironmentName}Services aby mieć konfigurację zależną od środowiska.

Użycie tego wzorca pozwala uniknąć nadmiernej logiki if/else jednej metody / klasy Startup i utrzymuje ją w czystości i oddzieleniu.

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

Gdy usługi Configure{Environmentname} lub Configure{Environmentname}Services nie zostaną znalezione, nastąpi powrót do odpowiednio opcji Configure lub ConfigureServices .

Ta sama semantyka dotyczy również klasy Startup . StartupProduction będą stosowane, gdy ASPNETCORE_ENVIRONMENT zmienna jest ustawiona na Production i spadnie z powrotem na Startup , kiedy to Stagging lub Development

Kompletny przykład:

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

Renderuj zawartość specyficzną dla środowiska

Może być konieczne renderowanie niektórych treści w widoku, które są specyficzne tylko dla niektórych środowisk. Aby osiągnąć ten cel, możesz użyć pomocnika tagów środowiska:

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

Pomocnik znacznika Środowisko wyświetli jego zawartość tylko wtedy, gdy bieżące środowisko pasuje do jednego ze środowisk określonych za pomocą atrybutu names .

Ustaw zmienną środowiskową z wiersza poleceń

Aby ustawić środowisko na Development

SET ASPNETCORE_ENVIRONMENT=Development

Teraz aplikacja Asp.Net Core będzie działać w zdefiniowanym środowisku.

Uwaga

  1. Nie powinno być spacji przed i po znaku równości = .
  2. Wiersz polecenia nie powinien być zamykany przed uruchomieniem aplikacji, ponieważ ustawienia nie zostały zachowane.

Ustaw zmienną środowiskową z PowerShell

Korzystając z PowerShell, możesz użyć setx.exe, aby ustawić zmienne środowiskowe na stałe.

  1. Uruchom PowerShell

  2. Wpisz jedno z poniższych:

    setx ASPNETCORE_ENVIRONMENT „rozwój”

    setx ASPNETCORE_ENVIRONMENT „inscenizacja”

  3. Uruchom ponownie PowerShell

Za pomocą ASPNETCORE_ENVIRONMENT z web.config

Jeśli nie chcesz używać ASPNETCORE_ENVIRONMENT ze zmiennych środowiskowych i używać go z pliku web.config aplikacji, zmodyfikuj plik web.config w następujący sposób:

<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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow