asp.net-core
Mehrere Umgebungen konfigurieren
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
undProduction
am besten Erweiterungsmethoden aus der HostingEnvironmentExtensions- Klasseenv.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
- Vor und nach dem Gleichheitszeichen
=
sollte kein Leerzeichen stehen. - 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.
Starten Sie PowerShell
Geben Sie eine der folgenden Möglichkeiten ein:
setx ASPNETCORE_ENVIRONMENT "Entwicklung"
setx ASPNETCORE_ENVIRONMENT "Staging"
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>