Suche…


Appseinstellungen pro Umgebung haben

Für jede Umgebung müssen Sie separate Apps-Einstellungen erstellen. {EnvironmentName} .json-Dateien:

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

Öffnen Sie dann die Datei "project.json" und fügen Sie sie im Abschnitt "publishOptions" in "include" ein. Hier werden alle Dateien und Ordner aufgelistet, die bei der Veröffentlichung enthalten sind:

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

Der letzte Schritt. Fügen Sie in Ihrer Startup-Klasse Folgendes hinzu:

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

im Konstruktor, wo Sie Konfigurationsquellen einrichten:

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

Umgebungsnamen aus Code abrufen / prüfen

Sie benötigen IHostingEnvironment eine Variable vom Typ IHostingEnvironment :

  • Umgebungsnamen abrufen:

      env.EnvironmentName
    
  • Für vordefinierte Development , Staging und Production am besten Erweiterungsmethoden aus der HostingEnvironmentExtensions- Klasse

      env.IsDevelopment()
      env.IsStaging()
      env.IsProduction()
    
  • Groß- / Kleinschreibung ignorieren (eine andere Erweiterungsmethode von HostingEnvironmentExtensions :

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

     env.EnvironmentName == "Development" 
    

Mehrere Umgebungen konfigurieren

In diesem Beispiel wird gezeigt, wie Sie mehrere Umgebungen mit unterschiedlichen Dependency Injection-Konfigurationen und separaten Middlewares in einer Startup Klasse konfigurieren.

Neben den public void Configure(IApplicationBuilder app) Methoden public void Configure(IApplicationBuilder app) und public void ConfigureServices(IServiceCollection services) können public void ConfigureServices(IServiceCollection services) Configure{EnvironmentName} und Configure{EnvironmentName}Services für eine umgebungsabhängige Konfiguration verwenden.

Die Verwendung dieses Musters vermeidet es, mit einer einzigen Methode / Startup Klasse zu viel if/else Logik zu machen und sie sauber und getrennt zu halten.

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

Wenn ein Configure{Environmentname} oder ein Configure{Environmentname}Services nicht gefunden wird, wird auf Configure bzw. ConfigureServices .

Die gleiche Semantik gilt auch für die Startup Klasse. StartupProduction wird verwendet, wenn die Variable ASPNETCORE_ENVIRONMENT auf Production gesetzt ist, und beim Stagging oder Development auf Startup

Ein vollständiges Beispiel:

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

Umgebungsspezifischen Inhalt in Ansicht darstellen

Möglicherweise müssen Sie einige Inhalte in der Ansicht darstellen, die nur für eine bestimmte Umgebung gelten. Um dieses Ziel zu erreichen, können Sie den Umgebungs- Tag-Helper verwenden :

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

Der Helper für das Umgebungs-Tag wird seinen Inhalt nur wiedergeben, wenn die aktuelle Umgebung mit einer der mit dem Attribut names angegebenen Umgebungen übereinstimmt.

Legen Sie die Umgebungsvariable über die Befehlszeile fest

Um die Umgebung auf Development

SET ASPNETCORE_ENVIRONMENT=Development

Das Ausführen einer Asp.Net Core-Anwendung erfolgt nun in der definierten Umgebung.

Hinweis

  1. Vor und nach dem Gleichheitszeichen = sollte kein Leerzeichen stehen.
  2. Die Eingabeaufforderung sollte vor dem Ausführen der Anwendung nicht geschlossen werden, da die Einstellungen nicht beibehalten werden.

Legen Sie die Umgebungsvariable in PowerShell fest

Wenn Sie PowerShell verwenden, können Sie setx.exe verwenden, um Umgebungsvariablen dauerhaft festzulegen.

  1. Starten Sie PowerShell

  2. Geben Sie eine der folgenden Möglichkeiten ein:

    setx ASPNETCORE_ENVIRONMENT "Entwicklung"

    setx ASPNETCORE_ENVIRONMENT "Staging"

  3. Starten Sie PowerShell neu

Verwendung von ASPNETCORE_ENVIRONMENT aus web.config

Wenn Sie ASPNETCORE_ENVIRONMENT nicht aus Umgebungsvariablen und von web.config Ihrer Anwendung aus verwenden möchten, ändern Sie web.config wie

<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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow