Webframeworkk/ASP.NET Core/Laufzeitumgebung: Unterschied zwischen den Versionen
imported>Import Version 190 |
Die Seite wurde neu angelegt: „ == 1. Einführung: Was sind Umgebungen? == In ASP.NET Core sind Umgebungen benannte Konfigurationen, die es Ihnen ermöglichen, Einstellungen, Konfigurationen und Middleware-Pipelines für spezifische Szenarien anzupassen. Dies hilft bei der Verwaltung von Unterschieden zwischen der Entwicklung, dem Testen und dem produktiven Einsatz. '''Die gängigsten Umgebungen sind:''' * '''Development (Entwicklung):''' Ihre lokale Umgebung, in der Sie die Anwendu…“ |
||
| Zeile 1: | Zeile 1: | ||
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).'' | ''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).'' | ||
---- | ---- | ||
== 1. Einführung: Was sind Umgebungen? == | == 1. Einführung: Was sind Umgebungen? == | ||
| Zeile 19: | Zeile 20: | ||
=== A. launchSettings.json (Für Visual Studio / Lokale Entwicklung) === | === A. launchSettings.json (Für Visual Studio / Lokale Entwicklung) === | ||
Diese Datei befindet sich im Ordner <code>Properties</code> Ihres Projekts. Sie wird hauptsächlich von Visual Studio verwendet. | Diese Datei befindet sich im Ordner <code>Properties</code> Ihres Projekts. Sie wird hauptsächlich von Visual Studio verwendet. | ||
<syntaxhighlight lang="json">{ | <syntaxhighlight lang="json"> | ||
{ | |||
"profiles": { | "profiles": { | ||
"IhrProjektName": { | "IhrProjektName": { | ||
| Zeile 31: | Zeile 32: | ||
} | } | ||
} | } | ||
}</syntaxhighlight> | } | ||
</syntaxhighlight> | |||
=== B. Über das Terminal / die Kommandozeile === | === B. Über das Terminal / die Kommandozeile === | ||
Sie können die Umgebung direkt beim Starten der Anwendung angeben: | |||
<syntaxhighlight lang="bash"> | |||
dotnet run --environment Staging | |||
</syntaxhighlight> | |||
Oder indem Sie die Umgebungsvariable in Ihrer Konsole setzen: | Oder indem Sie die Umgebungsvariable in Ihrer Konsole setzen: | ||
'''PowerShell:''' | '''PowerShell:''' | ||
<syntaxhighlight lang="powershell"> | |||
$env:ASPNETCORE_ENVIRONMENT = "Development" | |||
dotnet run | |||
</syntaxhighlight> | |||
'''Windows Eingabeaufforderung (CMD):''' | '''Windows Eingabeaufforderung (CMD):''' | ||
<syntaxhighlight lang="dos"> | |||
set ASPNETCORE_ENVIRONMENT=Production | |||
dotnet run | |||
</syntaxhighlight> | |||
'''macOS / Linux (Bash):''' | '''macOS / Linux (Bash):''' | ||
<syntaxhighlight lang="bash"> | |||
export ASPNETCORE_ENVIRONMENT=Staging | |||
dotnet run | |||
</syntaxhighlight> | |||
=== C. Systemweite Umgebungsvariablen === | === C. Systemweite Umgebungsvariablen === | ||
Für dauerhafte Einstellungen auf einem Server oder Entwicklungsrechner können Sie <code>ASPNETCORE_ENVIRONMENT</code> auch als systemweite Umgebungsvariable konfigurieren. | Für dauerhafte Einstellungen auf einem Server oder Entwicklungsrechner können Sie <code>ASPNETCORE_ENVIRONMENT</code> auch als systemweite Umgebungsvariable konfigurieren. | ||
| Zeile 60: | Zeile 70: | ||
=== Zugriff auf die Umgebung === | === Zugriff auf die Umgebung === | ||
<syntaxhighlight lang="csharp"> | |||
var builder = WebApplication.CreateBuilder(args); | |||
var environment = builder.Environment; | |||
// environment.EnvironmentName enthält den Namen (z.B. "Development") | |||
</syntaxhighlight> | |||
=== Bedingte Middleware-Konfiguration === | === Bedingte Middleware-Konfiguration === | ||
Ein häufiges Beispiel ist die Fehlerseite. In der Entwicklung möchten Sie detaillierte Fehler sehen, in der Produktion jedoch eine generische Fehlerseite. | Ein häufiges Beispiel ist die Fehlerseite. In der Entwicklung möchten Sie detaillierte Fehler sehen, in der Produktion jedoch eine generische Fehlerseite. | ||
<syntaxhighlight lang="csharp">var app = builder.Build(); | <syntaxhighlight lang="csharp"> | ||
var app = builder.Build(); | |||
if (app.Environment.IsDevelopment()) | if (app.Environment.IsDevelopment()) | ||
| Zeile 78: | Zeile 90: | ||
app.UseExceptionHandler("/Error"); // Generische Fehlerseite für Benutzer | app.UseExceptionHandler("/Error"); // Generische Fehlerseite für Benutzer | ||
app.UseHsts(); | app.UseHsts(); | ||
}</syntaxhighlight> | } | ||
</syntaxhighlight> | |||
=== Umgebungsspezifische Konfigurationsdateien === | === Umgebungsspezifische Konfigurationsdateien === | ||
ASP.NET Core lädt automatisch Konfigurationsdateien basierend auf der Umgebung. Dies ermöglicht es Ihnen, unterschiedliche Einstellungen (z.B. Datenbank-Connection-Strings) zu verwalten. | ASP.NET Core lädt automatisch Konfigurationsdateien basierend auf der Umgebung. Dies ermöglicht es Ihnen, unterschiedliche Einstellungen (z.B. Datenbank-Connection-Strings) zu verwalten. | ||
| Zeile 91: | Zeile 104: | ||
Wenn Sie in Ihren Controllern oder anderen Klassen Zugriff auf die Umgebungsinformationen benötigen, können Sie die <code>IWebHostEnvironment</code>-Schnittstelle per Dependency Injection (DI) einbinden. | Wenn Sie in Ihren Controllern oder anderen Klassen Zugriff auf die Umgebungsinformationen benötigen, können Sie die <code>IWebHostEnvironment</code>-Schnittstelle per Dependency Injection (DI) einbinden. | ||
<syntaxhighlight lang="csharp">using Microsoft.AspNetCore.Mvc; | <syntaxhighlight lang="csharp"> | ||
using Microsoft.AspNetCore.Mvc; | |||
using Microsoft.AspNetCore.Hosting; // Wichtig für IWebHostEnvironment | using Microsoft.AspNetCore.Hosting; // Wichtig für IWebHostEnvironment | ||
| Zeile 118: | Zeile 132: | ||
return View(); | return View(); | ||
} | } | ||
}</syntaxhighlight> | } | ||
</syntaxhighlight> | |||
Wichtige Methoden von <code>IWebHostEnvironment</code>: | Wichtige Methoden von <code>IWebHostEnvironment</code>: | ||
* <code>IsDevelopment()</code>: Gibt <code>true</code> zurück, wenn die Umgebung "Development" ist. | |||
* <code>IsDevelopment()</code>: Gibt <code>true</code> zurück, wenn die Umgebung | * <code>IsStaging()</code>: Gibt <code>true</code> zurück, wenn die Umgebung "Staging" ist. | ||
* <code>IsStaging()</code>: Gibt <code>true</code> zurück, wenn die Umgebung | * <code>IsProduction()</code>: Gibt <code>true</code> zurück, wenn die Umgebung "Production" ist. | ||
* <code>IsProduction()</code>: Gibt <code>true</code> zurück, wenn die Umgebung | * <code>IsEnvironment("MeinCustomName")</code>: Prüft auf benutzerdefinierte Umgebungsnamen. | ||
* <code>IsEnvironment( | |||
== 5. Developer Exception Page == | == 5. Developer Exception Page == | ||
Die '''Developer Exception Page''' ist ein Werkzeug, das bei Fehlern während der Entwicklung detaillierte Informationen anzeigt: | Die '''Developer Exception Page''' ist ein Werkzeug, das bei Fehlern während der Entwicklung detaillierte Informationen anzeigt: | ||
* Stack Trace (Fehlerverlauf) | * Stack Trace (Fehlerverlauf) | ||
* Query-String Parameter | * Query-String Parameter | ||
| Zeile 143: | Zeile 157: | ||
=== Syntax === | === Syntax === | ||
'''Include (Einschließen):''' Zeigt den Inhalt nur in den angegebenen Umgebungen an. | '''Include (Einschließen):''' | ||
Zeigt den Inhalt nur in den angegebenen Umgebungen an. | |||
<syntaxhighlight lang="html"><environment include="Development"> | <syntaxhighlight lang="html"> | ||
<environment include="Development"> | |||
<!-- Unkomprimiertes CSS für einfacheres Debugging --> | <!-- Unkomprimiertes CSS für einfacheres Debugging --> | ||
<link rel="stylesheet" href="~/css/site.css" /> | <link rel="stylesheet" href="~/css/site.css" /> | ||
<p>Debug-Modus aktiv</p> | <p>Debug-Modus aktiv</p> | ||
</environment></syntaxhighlight> | </environment> | ||
</syntaxhighlight> | |||
<syntaxhighlight lang="html"><environment exclude="Development"> | '''Exclude (Ausschließen):''' | ||
Zeigt den Inhalt in allen Umgebungen an, AUSSER den angegebenen. | |||
<syntaxhighlight lang="html"> | |||
<environment exclude="Development"> | |||
<!-- Minifiziertes CSS für bessere Performance in Produktion --> | <!-- Minifiziertes CSS für bessere Performance in Produktion --> | ||
<link rel="stylesheet" href="~/css/site.min.css" /> | <link rel="stylesheet" href="~/css/site.min.css" /> | ||
</environment></syntaxhighlight> | </environment> | ||
</syntaxhighlight> | |||
== 7. Best Practices == | == 7. Best Practices == | ||
| Zeile 163: | Zeile 183: | ||
* '''Feature Flags:''' Nutzen Sie Umgebungsvariablen, um bestimmte Features in verschiedenen Umgebungen an- oder abzuschalten. | * '''Feature Flags:''' Nutzen Sie Umgebungsvariablen, um bestimmte Features in verschiedenen Umgebungen an- oder abzuschalten. | ||
---- | |||
'''Zusammenfassung:''' | |||
Umgebungen in ASP.NET Core bieten eine flexible Möglichkeit, Ihre Anwendung zu steuern. Durch die Nutzung von <code>ASPNETCORE_ENVIRONMENT</code>, <code>IWebHostEnvironment</code> und dem <code><environment></code> Tag Helper können Sie sicherstellen, dass Ihre App in jeder Phase des Lebenszyklus (Entwicklung, Test, Produktion) optimal und sicher läuft. | |||
'''Zusammenfassung:''' Umgebungen in ASP.NET Core bieten eine flexible Möglichkeit, Ihre Anwendung zu steuern. Durch die Nutzung von <code>ASPNETCORE_ENVIRONMENT</code>, <code>IWebHostEnvironment</code> und dem <code><environment></code> Tag Helper können Sie sicherstellen, dass Ihre App in jeder Phase des Lebenszyklus (Entwicklung, Test, Produktion) optimal und sicher läuft. | |||
---- | ---- | ||
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).'' | ''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).'' | ||
Aktuelle Version vom 18. Februar 2026, 21:46 Uhr
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
1. Einführung: Was sind Umgebungen?
In ASP.NET Core sind Umgebungen benannte Konfigurationen, die es Ihnen ermöglichen, Einstellungen, Konfigurationen und Middleware-Pipelines für spezifische Szenarien anzupassen. Dies hilft bei der Verwaltung von Unterschieden zwischen der Entwicklung, dem Testen und dem produktiven Einsatz.
Die gängigsten Umgebungen sind:
- Development (Entwicklung): Ihre lokale Umgebung, in der Sie die Anwendung erstellen und testen. Hier benötigen Sie oft detaillierte Fehlermeldungen.
- Staging (Vorproduktion): Eine Umgebung, die der Produktion sehr ähnlich ist und für letzte Tests und Validierungen genutzt wird.
- Production (Produktion): Die Live-Umgebung, mit der Ihre Endbenutzer interagieren. Sicherheit und Performance stehen hier im Vordergrund.
2. Festlegen der Umgebung
ASP.NET Core liest die aktuelle Umgebung beim Start aus der Umgebungsvariable ASPNETCORE_ENVIRONMENT. Der Wert dieser Variable bestimmt die aktive Umgebung.
Es gibt mehrere Wege, diese Variable zu setzen:
A. launchSettings.json (Für Visual Studio / Lokale Entwicklung)
Diese Datei befindet sich im Ordner Properties Ihres Projekts. Sie wird hauptsächlich von Visual Studio verwendet.
{
"profiles": {
"IhrProjektName": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
B. Über das Terminal / die Kommandozeile
Sie können die Umgebung direkt beim Starten der Anwendung angeben:
dotnet run --environment Staging
Oder indem Sie die Umgebungsvariable in Ihrer Konsole setzen:
PowerShell:
$env:ASPNETCORE_ENVIRONMENT = "Development"
dotnet run
Windows Eingabeaufforderung (CMD):
set ASPNETCORE_ENVIRONMENT=Production
dotnet run
macOS / Linux (Bash):
export ASPNETCORE_ENVIRONMENT=Staging
dotnet run
C. Systemweite Umgebungsvariablen
Für dauerhafte Einstellungen auf einem Server oder Entwicklungsrechner können Sie ASPNETCORE_ENVIRONMENT auch als systemweite Umgebungsvariable konfigurieren.
3. Verwendung von Umgebungen im Code (Program.cs)
Sie können auf die aktuelle Umgebung zugreifen und bedingte Logik verwenden, um Ihre Anwendung zu konfigurieren.
Zugriff auf die Umgebung
var builder = WebApplication.CreateBuilder(args);
var environment = builder.Environment;
// environment.EnvironmentName enthält den Namen (z.B. "Development")
Bedingte Middleware-Konfiguration
Ein häufiges Beispiel ist die Fehlerseite. In der Entwicklung möchten Sie detaillierte Fehler sehen, in der Produktion jedoch eine generische Fehlerseite.
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage(); // Detaillierte Fehlerseite für Entwickler
}
else
{
app.UseExceptionHandler("/Error"); // Generische Fehlerseite für Benutzer
app.UseHsts();
}
Umgebungsspezifische Konfigurationsdateien
ASP.NET Core lädt automatisch Konfigurationsdateien basierend auf der Umgebung. Dies ermöglicht es Ihnen, unterschiedliche Einstellungen (z.B. Datenbank-Connection-Strings) zu verwalten.
- 1.
appsettings.json: Globale Einstellungen. - 2.
appsettings.Development.json: Überschreibt Einstellungen für die Entwicklung. - 3.
appsettings.Production.json: Überschreibt Einstellungen für die Produktion.
4. Die IWebHostEnvironment Schnittstelle
Wenn Sie in Ihren Controllern oder anderen Klassen Zugriff auf die Umgebungsinformationen benötigen, können Sie die IWebHostEnvironment-Schnittstelle per Dependency Injection (DI) einbinden.
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Hosting; // Wichtig für IWebHostEnvironment
public class HomeController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
public HomeController(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment = webHostEnvironment;
}
public IActionResult Index()
{
// Zugriff auf Eigenschaften
var envName = _webHostEnvironment.EnvironmentName;
var webRoot = _webHostEnvironment.WebRootPath;
var contentRoot = _webHostEnvironment.ContentRootPath;
// Prüfung der Umgebung
if (_webHostEnvironment.IsDevelopment())
{
ViewBag.Message = "Wir sind im Entwicklungsmodus!";
}
return View();
}
}
Wichtige Methoden von IWebHostEnvironment:
IsDevelopment(): Gibttruezurück, wenn die Umgebung "Development" ist.IsStaging(): Gibttruezurück, wenn die Umgebung "Staging" ist.IsProduction(): Gibttruezurück, wenn die Umgebung "Production" ist.IsEnvironment("MeinCustomName"): Prüft auf benutzerdefinierte Umgebungsnamen.
5. Developer Exception Page
Die Developer Exception Page ist ein Werkzeug, das bei Fehlern während der Entwicklung detaillierte Informationen anzeigt:
- Stack Trace (Fehlerverlauf)
- Query-String Parameter
- Cookies
- HTTP-Header
Wichtig: Diese Seite sollte niemals in der Produktion aktiviert werden, da sie sensible Informationen preisgeben könnte. Aktivieren Sie sie nur im Development-Modus (siehe Abschnitt 3).
6. Der <environment> Tag Helper
In Razor Views können Sie den <environment> Tag Helper verwenden, um HTML-Inhalte basierend auf der aktuellen Umgebung ein- oder auszublenden. Dies ist besonders nützlich für das Laden von Skripten oder Stylesheets.
Syntax
Include (Einschließen): Zeigt den Inhalt nur in den angegebenen Umgebungen an.
<environment include="Development">
<!-- Unkomprimiertes CSS für einfacheres Debugging -->
<link rel="stylesheet" href="~/css/site.css" />
<p>Debug-Modus aktiv</p>
</environment>
Exclude (Ausschließen): Zeigt den Inhalt in allen Umgebungen an, AUSSER den angegebenen.
<environment exclude="Development">
<!-- Minifiziertes CSS für bessere Performance in Produktion -->
<link rel="stylesheet" href="~/css/site.min.css" />
</environment>
7. Best Practices
- Sicherheit: Nutzen Sie umgebungsspezifische Konfigurationsdateien, um sensible Daten (wie Produktions-Datenbankpasswörter) nicht in der Entwicklungsumgebung zu speichern.
- Keine Debug-Infos in Produktion: Stellen Sie sicher, dass Tools wie die
DeveloperExceptionPagein der Produktion deaktiviert sind. - Logging: Konfigurieren Sie Logging so, dass in der Entwicklung mehr Details (Verbose) und in der Produktion nur wichtige Fehler (Error/Warning) protokolliert werden.
- Feature Flags: Nutzen Sie Umgebungsvariablen, um bestimmte Features in verschiedenen Umgebungen an- oder abzuschalten.
Zusammenfassung:
Umgebungen in ASP.NET Core bieten eine flexible Möglichkeit, Ihre Anwendung zu steuern. Durch die Nutzung von ASPNETCORE_ENVIRONMENT, IWebHostEnvironment und dem <environment> Tag Helper können Sie sicherstellen, dass Ihre App in jeder Phase des Lebenszyklus (Entwicklung, Test, Produktion) optimal und sicher läuft.
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).