Používání více prostředí v ASP.NET Core
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Autoři: Rick Anderson a Kirk Larkin
ASP.NET Core konfiguruje chování aplikace na základě prostředí runtime pomocí proměnné prostředí.
Pokyny Blazor k prostředím, která přidávají nebo nahrazují pokyny v tomto článku, najdete v tématu ASP.NET základních Blazor prostředích.
Prostředí
Pokud chcete určit prostředí runtime, ASP.NET Core čte z následujících proměnných prostředí:
- DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENT
při zavolání WebApplication.CreateBuilder metody. Výchozí ASP.NET šablony webové aplikace Core volajíWebApplication.CreateBuilder
. HodnotaASPNETCORE_ENVIRONMENT
přepíšeDOTNET_ENVIRONMENT
.
Pokud chcete určit prostředí runtime, ASP.NET Core čte z následujících proměnných prostředí:
- DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENT
při zavolání WebApplication.CreateBuilder metody. Výchozí ASP.NET šablony webové aplikace Core volajíWebApplication.CreateBuilder
. HodnotaDOTNET_ENVIRONMENT
se přepíšeASPNETCORE_ENVIRONMENT
přiWebApplicationBuilder
použití. U jiných hostitelů, napříkladConfigureWebHostDefaults
aWebHost.CreateDefaultBuilder
,ASPNETCORE_ENVIRONMENT
má vyšší prioritu.
IHostEnvironment.EnvironmentName
lze nastavit na libovolnou hodnotu, ale architektura poskytuje následující hodnoty:
- Development: Soubor launchSettings.json se nastaví
ASPNETCORE_ENVIRONMENT
naDevelopment
místní počítač. - Staging
- Production: Výchozí hodnota, pokud
DOTNET_ENVIRONMENT
nebyla nastavena aASPNETCORE_ENVIRONMENT
nebyla nastavena.
Následující kód:
- Podobá se kódu vygenerovanému šablonami ASP.NET Core.
- Povolí stránku výjimky vývojáře, pokud
ASPNETCORE_ENVIRONMENT
je nastavena naDevelopment
hodnotu . To se provádí automaticky metodou WebApplication.CreateBuilder . - Volání UseExceptionHandler , pokud hodnota je cokoli jiného
ASPNETCORE_ENVIRONMENT
nežDevelopment
. - IWebHostEnvironment Poskytuje instanci ve Environment vlastnosti
WebApplication
.
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Pomocný rutina značky prostředí používá hodnotu IHostEnvironment.EnvironmentName k zahrnutí nebo vyloučení značek v elementu:
<environment include="Development">
<div>Environment is Development</div>
</environment>
<environment exclude="Development">
<div>Environment is NOT Development</div>
</environment>
<environment include="Staging,Development,Staging_2">
<div>Environment is: Staging, Development or Staging_2</div>
</environment>
Stránka O produktu z ukázkového kódu obsahuje předchozí kód a zobrazí hodnotu IWebHostEnvironment.EnvironmentName
.
Ve Windows a macOS se proměnné prostředí a hodnoty nerozlišují malá a velká písmena. Proměnné a hodnoty prostředí Linuxu ve výchozím nastavení rozlišují malá a velká písmena.
Vytvoření prostředíSample
Vzorový kód použitý v tomto článku je založený na Razor projektu Pages s názvem EnvironmentSample.
Následující příkazy rozhraní příkazového řádku .NET vytvoří a spustí webovou aplikaci s názvem EnvironmentSample:
dotnet new webapp -o EnvironmentsSample
cd EnvironmentsSample
dotnet run --verbosity normal
Když se aplikace spustí, zobrazí výstup podobný následujícímu:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7152
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5105
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Path\To\EnvironmentsSample
Nastavení prostředí na příkazovém řádku
--environment
K nastavení prostředí použijte příznak. Příklad:
dotnet run --environment Production
Předchozí příkaz nastaví prostředí a Production
zobrazí výstup podobný následujícímu v příkazovém okně:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: https://localhost:7262
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5005
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Path\To\EnvironmentsSample
Vývoj a launchSettings.json
Vývojové prostředí může povolit funkce, které by neměly být zpřístupněny v produkčním prostředí. Například šablony projektu ASP.NET Core umožňují stránku výjimek pro vývojáře ve vývojovém prostředí. Kvůli nákladům na výkon dochází k ověřování rozsahu a ověřování závislostí pouze ve vývoji.
Prostředí pro vývoj místních počítačů lze nastavit v souboru Properties\launchSettings.json projektu. Hodnoty prostředí nastavené v launchSettings.json
přepsání hodnoty nastavené v systémovém prostředí.
Soubor launchSettings.json
:
- Používá se jenom na místním vývojovém počítači.
- Není nasazen.
- Obsahuje nastavení profilu.
Následující kód JSON ukazuje launchSettings.json
soubor webového projektu ASP.NET Core s názvem EnvironmentSample vytvořený pomocí sady Visual Studio nebo dotnet new
:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59481",
"sslPort": 44308
}
},
"profiles": {
"EnvironmentsSample": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7152;http://localhost:5105",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Předchozí JSON obsahuje dva profily:
EnvironmentsSample
: Název profilu je název projektu. Jako první uvedený profil se tento profil používá ve výchozím nastavení. Klíč"commandName"
má hodnotu"Project"
, proto se Kestrel webový server spustí.IIS Express
: Klíč"commandName"
má hodnotu"IISExpress"
, proto IISExpress je webový server.
Spouštěcí profil můžete nastavit na projekt nebo jakýkoli jiný profil, který je launchSettings.json
součástí . Například na následujícím obrázku vyberete název projektu, který spustí Kestrel webový server.
Hodnota commandName
může zadat webový server, který se má spustit. commandName
může být libovolná z následujících možností:
IISExpress
: Spustí službu IIS Express.IIS
: Nebyl spuštěn žádný webový server. Očekává se, že služba IIS bude dostupná.Project
: Starty Kestrel.
Karta Vlastnosti projektu sady Visual Studio 2022 Debug / General (Obecné ) poskytuje odkaz na uživatelské rozhraní pro otevření spouštěcích profilů ladění. Tento odkaz otevře dialogové okno Spustit profily , které umožňuje upravit nastavení proměnné prostředí v launchSettings.json
souboru. Dialogové okno Spustit profily můžete otevřít také v nabídce Ladění výběrem <názvu> projektu Vlastnosti ladění. Změny provedené v profilech projektu se nemusí projevit, dokud se webový server nerestartuje. Kestrel je nutné restartovat, aby bylo možné detekovat změny provedené v jeho prostředí.
Následující launchSettings.json
soubor obsahuje více profilů:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:59481",
"sslPort": 44308
}
},
"profiles": {
"EnvironmentsSample": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7152;http://localhost:5105",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"EnvironmentsSample-Staging": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7152;http://localhost:5105",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging",
"ASPNETCORE_DETAILEDERRORS": "1",
"ASPNETCORE_SHUTDOWNTIMEOUTSECONDS": "3"
}
},
"EnvironmentsSample-Production": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7152;http://localhost:5105",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Profily je možné vybrat:
V uživatelském rozhraní sady Visual Studio.
Pomocí příkazu rozhraní příkazového
dotnet run
řádku s--launch-profile
možností nastavenou na název profilu. Tento přístup podporuje Kestrel pouze profily.dotnet run --launch-profile "EnvironmentsSample"
Upozorňující
launchSettings.json
by neměly ukládat tajné kódy. Nástroj Secret Manager lze použít k ukládání tajných kódů pro místní vývoj.
Při použití editoru .vscode/launch.json
Visual Studio Code je možné v souboru nastavit proměnné prostředí. Následující příklad nastaví několik proměnných prostředí pro hodnoty konfigurace hostitele:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
// Configuration ommitted for brevity.
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5001",
"ASPNETCORE_DETAILEDERRORS": "1",
"ASPNETCORE_SHUTDOWNTIMEOUTSECONDS": "3"
},
// Configuration ommitted for brevity.
Tento .vscode/launch.json
soubor používá pouze Visual Studio Code.
Výroba
Produkční prostředí by mělo být nakonfigurováno tak, aby maximalizovalo odolnost zabezpečení, výkonu a aplikací. Mezi běžná nastavení, která se liší od vývoje, patří:
- Ukládání do mezipaměti
- Prostředky na straně klienta jsou seskupené, minifikované a potenciálně obsluhované z CDN.
- Diagnostické chybové stránky jsou zakázané.
- Byly povoleny popisné chybové stránky.
- Protokolování a monitorování v produkčním prostředí je povolené. Například pomocí Application Insights.
Nastavení prostředí nastavením proměnné prostředí
Často je užitečné nastavit konkrétní prostředí pro testování pomocí proměnné prostředí nebo nastavení platformy. Pokud prostředí není nastavené, nastaví se výchozí Production
hodnota , která zakáže většinu funkcí ladění. Metoda nastavení prostředí závisí na operačním systému.
Při vytváření hostitele určuje poslední nastavení prostředí přečtené aplikací prostředí. Prostředí aplikace se během běhu aplikace nedá změnit.
Na stránce O produktu z ukázkového kódu se zobrazí hodnota IWebHostEnvironment.EnvironmentName
.
Azure App Service
Production je výchozí hodnota, pokud DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENT
nebyla nastavena. Aplikace nasazené do Azure jsou Production
ve výchozím nastavení.
Nastavení prostředí v aplikaci Aplikace Azure Service pomocí portálu:
- Vyberte aplikaci ze stránky App Services .
- Ve skupině Nastavení vyberte Proměnné prostředí.
- Na kartě Nastavení aplikace vyberte + Přidat.
- V okně Pro přidání nebo úpravu nastavení aplikace zadejte
ASPNETCORE_ENVIRONMENT
název. Jako hodnotu zadejte prostředí (napříkladStaging
). - Pokud chcete, aby nastavení prostředí zůstalo s aktuálním slotem při prohození slotů nasazení, zaškrtněte políčko Nastavení slotu nasazení. Další informace najdete v tématu Nastavení přípravných prostředí ve službě Aplikace Azure v dokumentaci k Azure.
- Kliknutím na tlačítko OK zavřete dialogové okno pro nastavení aplikace Přidat nebo upravit.
- V horní části stránky Konfigurace vyberte Uložit.
Aplikace Azure Služba automaticky restartuje aplikaci po přidání, změně nebo odstranění aplikace na webu Azure Portal.
Windows – Nastavení proměnné prostředí pro proces
Hodnoty prostředí v launchSettings.json
přepsání hodnot nastavené v systémovém prostředí.
Pokud chcete nastavit ASPNETCORE_ENVIRONMENT
aktuální relaci při spuštění aplikace pomocí příkazu dotnet, použijte následující příkazy na příkazovém řádku nebo v PowerShellu:
set ASPNETCORE_ENVIRONMENT=Staging
dotnet run --no-launch-profile
$Env:ASPNETCORE_ENVIRONMENT = "Staging"
dotnet run --no-launch-profile
Windows – Globální nastavení proměnné prostředí
Předchozí příkazy jsou nastavené ASPNETCORE_ENVIRONMENT
pouze pro procesy spuštěné z příkazového okna.
Pokud chcete nastavit hodnotu globálně ve Windows, použijte některý z následujících přístupů:
Otevřete nastavení systému Ovládací panely> System>Advanced a přidejte nebo upravte
ASPNETCORE_ENVIRONMENT
hodnotu:Otevřete příkazový řádek pro správu a použijte
setx
příkaz nebo otevřete příkazový řádek PowerShellu pro správu a použijte[Environment]::SetEnvironmentVariable
:-
setx ASPNETCORE_ENVIRONMENT Staging /M
Přepínač
/M
nastaví proměnnou prostředí na úrovni systému./M
Pokud se přepínač nepoužívá, proměnná prostředí se nastaví pro uživatelský účet. -
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Staging", "Machine")
Možnost
Machine
nastaví proměnnou prostředí na úrovni systému. Pokud se hodnota možnosti změní naUser
, proměnná prostředí se nastaví pro uživatelský účet.
-
ASPNETCORE_ENVIRONMENT
Když je proměnná prostředí nastavená globálně, projeví dotnet run
se v libovolném příkazovém okně otevřeném po nastavení hodnoty. Hodnoty prostředí v launchSettings.json
přepsání hodnot nastavené v systémovém prostředí.
Windows – Použití web.config
Chcete-li nastavit proměnnou ASPNETCORE_ENVIRONMENT
prostředí pomocí web.config
, přečtěte si část Nastavení proměnných prostředí souboru web.config.
Windows – Nasazení služby IIS
<EnvironmentName>
Zahrnout vlastnost do profilu publikování (.pubxml) nebo souboru projektu. Tento přístup nastaví prostředí v souboru web.config při publikování projektu:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Pokud chcete nastavit ASPNETCORE_ENVIRONMENT
proměnnou prostředí pro aplikaci spuštěnou v izolovaném fondu aplikací (podporovaném ve službě IIS 10.0 nebo novějším), přečtěte si část AppCmd.exe příkazu environment Variables <environmentVariables>. ASPNETCORE_ENVIRONMENT
Pokud je proměnná prostředí nastavená pro fond aplikací, její hodnota přepíše nastavení na úrovni systému.
Když hostuje aplikaci ve službě IIS a přidává nebo mění ASPNETCORE_ENVIRONMENT
proměnnou prostředí, použijte jeden z následujících přístupů k tomu, aby aplikace získaly novou hodnotu:
- Spusťte
net stop was /y
následujícínet start w3svc
příkaz z příkazového řádku. - Restartujte server.
macOS
Nastavení aktuálního prostředí pro macOS se dá provést v řádku při spuštění aplikace:
ASPNETCORE_ENVIRONMENT=Staging dotnet run
Případně nastavte prostředí před export
spuštěním aplikace:
export ASPNETCORE_ENVIRONMENT=Staging
Proměnné prostředí na úrovni počítače jsou nastavené v souboru .bashrc nebo .bash_profile . Upravte soubor pomocí libovolného textového editoru. Přidejte následující příkaz:
export ASPNETCORE_ENVIRONMENT=Staging
Linux
V případě linuxových distribucí použijte export
příkaz na příkazovém řádku pro nastavení proměnných založených na relacích a soubor bash_profile pro nastavení prostředí na úrovni počítače.
Nastavení prostředí v kódu
Pokud chcete nastavit prostředí v kódu, použijte WebApplicationOptions.EnvironmentName při vytváření WebApplicationBuilder, jak je znázorněno v následujícím příkladu:
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
EnvironmentName = Environments.Staging
});
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Konfigurace podle prostředí
Pokud chcete načíst konfiguraci podle prostředí, přečtěte si téma Konfigurace v ASP.NET Core.
Konfigurace služeb a middlewaru podle prostředí
V závislosti na aktuálním prostředí použijte WebApplicationBuilder.Environment nebo WebApplication.Environment podmíněně přidávat služby nebo middleware. Šablona projektu obsahuje příklad kódu, který přidává middleware pouze v případě, že aktuální prostředí není vývojové:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Zvýrazněný kód kontroluje aktuální prostředí při sestavování kanálu požadavku. Pokud chcete při konfiguraci služeb zkontrolovat aktuální prostředí, použijte builder.Environment
místo app.Environment
.
Další materiály
Autoři: Rick Anderson a Kirk Larkin
ASP.NET Core konfiguruje chování aplikace na základě prostředí runtime pomocí proměnné prostředí.
Prostředí
Pokud chcete určit prostředí runtime, ASP.NET Core čte z následujících proměnných prostředí:
- DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENT
je ConfigureWebHostDefaults volána. Výchozí ASP.NET šablony webové aplikace Core volajíConfigureWebHostDefaults
. HodnotaASPNETCORE_ENVIRONMENT
přepíšeDOTNET_ENVIRONMENT
.
IHostEnvironment.EnvironmentName
lze nastavit na libovolnou hodnotu, ale architektura poskytuje následující hodnoty:
- Development : Soubor launchSettings.json se nastaví
ASPNETCORE_ENVIRONMENT
naDevelopment
místní počítač. - Staging
- Production : Výchozí hodnota, pokud
DOTNET_ENVIRONMENT
nebyla nastavena aASPNETCORE_ENVIRONMENT
nebyla nastavena.
Následující kód:
- Volání UseDeveloperExceptionPage , pokud
ASPNETCORE_ENVIRONMENT
je nastavena naDevelopment
hodnotu . - Volání UseExceptionHandler , pokud je hodnota
ASPNETCORE_ENVIRONMENT
nastavena naStaging
,Production
neboStaging_2
. - IWebHostEnvironment Vloží do
Startup.Configure
. Tento přístup je užitečný, když aplikace vyžaduje úpravyStartup.Configure
jenom pro několik prostředí s minimálními rozdíly v kódu v jednotlivých prostředích. - Podobá se kódu vygenerovanému šablonami ASP.NET Core.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
app.UseExceptionHandler("/Error");
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Pomocný rutina značky prostředí používá hodnotu IHostEnvironment.EnvironmentName k zahrnutí nebo vyloučení značek v elementu:
<environment include="Development">
<div>The effective tag is: <environment include="Development"></div>
</environment>
<environment exclude="Development">
<div>The effective tag is: <environment exclude="Development"></div>
</environment>
<environment include="Staging,Development,Staging_2">
<div>
The effective tag is:
<environment include="Staging,Development,Staging_2">
</div>
</environment>
Stránka O produktu z ukázkového kódu obsahuje předchozí kód a zobrazí hodnotu IWebHostEnvironment.EnvironmentName
.
Ve Windows a macOS se proměnné prostředí a hodnoty nerozlišují malá a velká písmena. Proměnné a hodnoty prostředí Linuxu ve výchozím nastavení rozlišují malá a velká písmena .
Vytvoření prostředíSample
Vzorový kód použitý v tomto dokumentu je založený na Razor projektu Pages s názvem EnvironmentSample.
Následující kód vytvoří a spustí webovou aplikaci s názvem EnvironmentSample:
dotnet new webapp -o EnvironmentsSample
cd EnvironmentsSample
dotnet run --verbosity normal
Při spuštění aplikace se zobrazí některý z následujících výstupů:
Using launch settings from c:\tmp\EnvironmentsSample\Properties\launchSettings.json
info: Microsoft.Hosting.Lifetime[0]
Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
Content root path: c:\tmp\EnvironmentsSample
Vývoj a launchSettings.json
Vývojové prostředí může povolit funkce, které by neměly být zpřístupněny v produkčním prostředí. Například šablony ASP.NET Core umožňují stránku výjimek pro vývojáře ve vývojovém prostředí.
Prostředí pro vývoj místních počítačů lze nastavit v souboru Properties\launchSettings.json projektu. Hodnoty prostředí nastavené v launchSettings.json
přepsání hodnoty nastavené v systémovém prostředí.
Soubor launchSettings.json
:
- Používá se jenom na místním vývojovém počítači.
- Není nasazen.
- obsahuje nastavení profilu.
Následující kód JSON ukazuje launchSettings.json
soubor webového projektu ASP.NET Core s názvem EnvironmentSample vytvořený pomocí sady Visual Studio nebo dotnet new
:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:64645",
"sslPort": 44366
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Předchozí revize obsahuje dva profily:
IIS Express
: Výchozí profil použitý při spuštění aplikace ze sady Visual Studio. Klíč"commandName"
má hodnotu"IISExpress"
, proto IISExpress je webový server. Spouštěcí profil můžete nastavit na projekt nebo jakýkoli jiný zahrnutý profil. Například na následujícím obrázku vyberete název projektu, který spustí Kestrel webový server.EnvironmentsSample
: Název profilu je název projektu. Tento profil se ve výchozím nastavení používá při spuštění aplikace pomocídotnet run
aplikace . Klíč"commandName"
má hodnotu"Project"
, proto se Kestrel webový server spustí.
Hodnota commandName
může zadat webový server, který se má spustit. commandName
může být libovolná z následujících možností:
IISExpress
: Spustí službu IIS Express.IIS
: Nebyl spuštěn žádný webový server. Očekává se, že služba IIS bude dostupná.Project
: Starty Kestrel.
Karta Vlastnosti projektu sady Visual Studio poskytuje grafické uživatelské rozhraní pro úpravu launchSettings.json
souboru. Změny provedené v profilech projektu se nemusí projevit, dokud se webový server nerestartuje. Kestrel je nutné restartovat, aby bylo možné detekovat změny provedené v jeho prostředí.
Následující launchSettings.json
soubor obsahuje více profilů:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:64645",
"sslPort": 44366
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IISX-Production": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
},
"IISX-Staging": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging",
"ASPNETCORE_DETAILEDERRORS": "1",
"ASPNETCORE_SHUTDOWNTIMEOUTSECONDS": "3"
}
},
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"KestrelStaging": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
}
}
}
}
Profily je možné vybrat:
V uživatelském rozhraní sady Visual Studio.
dotnet run
Použití příkazu v příkazovém prostředí s--launch-profile
možností nastavenou na název profilu. Tento přístup podporuje Kestrel pouze profily.dotnet run --launch-profile "SampleApp"
Upozorňující
launchSettings.json
by neměly ukládat tajné kódy. Nástroj Secret Manager lze použít k ukládání tajných kódů pro místní vývoj.
Při použití editoru .vscode/launch.json
Visual Studio Code je možné v souboru nastavit proměnné prostředí. Následující příklad nastaví několik hodnot konfigurace hostitele proměnné prostředí:
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
"type": "coreclr",
// Configuration ommitted for brevity.
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "https://localhost:5001",
"ASPNETCORE_DETAILEDERRORS": "1",
"ASPNETCORE_SHUTDOWNTIMEOUTSECONDS": "3"
},
// Configuration ommitted for brevity.
Tento .vscode/launch.json
soubor používá jenom Visual Studio Code.
Výroba
Produkční prostředí by mělo být nakonfigurováno tak, aby maximalizovalo odolnost zabezpečení, výkonu a aplikací. Mezi běžná nastavení, která se liší od vývoje, patří:
- Ukládání do mezipaměti
- Prostředky na straně klienta jsou seskupené, minifikované a potenciálně obsluhované z CDN.
- Diagnostické chybové stránky jsou zakázané.
- Byly povoleny popisné chybové stránky.
- Protokolování a monitorování v produkčním prostředí je povolené. Například pomocí Application Insights.
Nastavení prostředí
Často je užitečné nastavit konkrétní prostředí pro testování pomocí proměnné prostředí nebo nastavení platformy. Pokud prostředí není nastavené, nastaví se výchozí Production
hodnota , která zakáže většinu funkcí ladění. Metoda nastavení prostředí závisí na operačním systému.
Při vytváření hostitele určuje poslední nastavení prostředí přečtené aplikací prostředí. Prostředí aplikace se během běhu aplikace nedá změnit.
Na stránce O produktu z ukázkového kódu se zobrazí hodnota IWebHostEnvironment.EnvironmentName
.
Azure App Service
Production je výchozí hodnota, pokud DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENT
nebyla nastavena. Aplikace nasazené do Azure jsou Production
ve výchozím nastavení.
Pokud chcete nastavit prostředí ve službě Aplikace Azure Service, proveďte následující kroky:
- V okně App Services vyberte aplikaci.
- Ve skupině Nastavení vyberte okno Konfigurace.
- Na kartě Nastavení aplikace vyberte Nové nastavení aplikace.
- V okně Pro přidání nebo úpravu nastavení aplikace zadejte
ASPNETCORE_ENVIRONMENT
název. Jako hodnotu zadejte prostředí (napříkladStaging
). - Pokud chcete, aby nastavení prostředí zůstalo s aktuálním slotem při prohození slotů nasazení, zaškrtněte políčko Nastavení slotu nasazení. Další informace najdete v tématu Nastavení přípravných prostředí ve službě Aplikace Azure v dokumentaci k Azure.
- Výběrem možnosti OK zavřete okno pro nastavení aplikace Přidat nebo upravit.
- V horní části okna Konfigurace vyberte Uložit.
Aplikace Azure Služba automaticky restartuje aplikaci po přidání, změně nebo odstranění aplikace na webu Azure Portal.
Windows
Hodnoty prostředí v launchSettings.json
přepsání hodnot nastavené v systémovém prostředí.
Pokud chcete nastavit ASPNETCORE_ENVIRONMENT
aktuální relaci při spuštění aplikace pomocí příkazu dotnet, použijí se následující příkazy:
Příkazového řádku
set ASPNETCORE_ENVIRONMENT=Staging
dotnet run --no-launch-profile
PowerShell
$Env:ASPNETCORE_ENVIRONMENT = "Staging"
dotnet run --no-launch-profile
Předchozí příkaz nastaví ASPNETCORE_ENVIRONMENT
pouze pro procesy spuštěné z příkazového okna.
Pokud chcete nastavit hodnotu globálně ve Windows, použijte některý z následujících přístupů:
Otevřete nastavení systému Ovládací panely> System>Advanced a přidejte nebo upravte
ASPNETCORE_ENVIRONMENT
hodnotu:Otevřete příkazový řádek pro správu a použijte
setx
příkaz nebo otevřete příkazový řádek PowerShellu pro správu a použijte[Environment]::SetEnvironmentVariable
:Příkazového řádku
setx ASPNETCORE_ENVIRONMENT Staging /M
Přepínač
/M
označuje, že se má proměnná prostředí nastavit na úrovni systému./M
Pokud se přepínač nepoužívá, proměnná prostředí se nastaví pro uživatelský účet.PowerShell
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Staging", "Machine")
Hodnota
Machine
možnosti označuje, že chcete nastavit proměnnou prostředí na úrovni systému. Pokud se hodnota možnosti změní naUser
, proměnná prostředí se nastaví pro uživatelský účet.
ASPNETCORE_ENVIRONMENT
Když je proměnná prostředí nastavená globálně, projeví dotnet run
se v libovolném příkazovém okně otevřeném po nastavení hodnoty. Hodnoty prostředí v launchSettings.json
přepsání hodnot nastavené v systémovém prostředí.
web.config
Chcete-li nastavit proměnnou ASPNETCORE_ENVIRONMENT
prostředí pomocí web.config
, přečtěte si část Nastavení proměnných prostředí souboru web.config.
Soubor projektu nebo profil publikování
Pro nasazení služby Windows IIS: Zahrňte <EnvironmentName>
vlastnost do profilu publikování (.pubxml) nebo souboru projektu. Tento přístup nastaví prostředí v souboru web.config při publikování projektu:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
Fond aplikací služby IIS
Pokud chcete nastavit ASPNETCORE_ENVIRONMENT
proměnnou prostředí pro aplikaci spuštěnou v izolovaném fondu aplikací (podporováno ve službě IIS 10.0 nebo novější), přečtěte si část příkazu AppCmd.exe tématu Environment Variables <environmentVariables>. ASPNETCORE_ENVIRONMENT
Pokud je proměnná prostředí nastavená pro fond aplikací, její hodnota přepíše nastavení na úrovni systému.
Při hostování aplikace ve službě IIS a přidávání nebo změně ASPNETCORE_ENVIRONMENT
proměnné prostředí použijte některý z následujících přístupů, aby aplikace získaly novou hodnotu:
- Spusťte
net stop was /y
následujícínet start w3svc
příkaz z příkazového řádku. - Restartujte server.
macOS
Nastavení aktuálního prostředí pro macOS se dá provést v řádku při spuštění aplikace:
ASPNETCORE_ENVIRONMENT=Staging dotnet run
Případně nastavte prostředí před export
spuštěním aplikace:
export ASPNETCORE_ENVIRONMENT=Staging
Proměnné prostředí na úrovni počítače jsou nastavené v souboru .bashrc nebo .bash_profile . Upravte soubor pomocí libovolného textového editoru. Přidejte následující příkaz:
export ASPNETCORE_ENVIRONMENT=Staging
Linux
V případě linuxových distribucí použijte export
příkaz na příkazovém řádku pro nastavení proměnných založených na relaci a bash_profile soubor pro nastavení prostředí na úrovni počítače.
Nastavení prostředí v kódu
Volání UseEnvironment při sestavování hostitele Viz obecné hostitele .NET v ASP.NET Core.
Konfigurace podle prostředí
Pokud chcete načíst konfiguraci podle prostředí, přečtěte si téma Konfigurace v ASP.NET Core.
Třída a metody startupu založené na prostředí
Vložení IWebHostEnvironment do třídy Startup
Vložte IWebHostEnvironment do konstruktoru Startup
. Tento přístup je užitečný, když aplikace vyžaduje konfiguraci Startup
jenom pro několik prostředí s minimálními rozdíly v kódu na prostředí.
V následujícím příkladu:
- Prostředí se uchovává v terénu
_env
. _env
se používá kConfigureServices
Configure
použití konfigurace spouštění na základě prostředí aplikace.
public class Startup
{
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
_env = env;
}
public IConfiguration Configuration { get; }
private readonly IWebHostEnvironment _env;
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
Console.WriteLine(_env.EnvironmentName);
}
else if (_env.IsStaging())
{
Console.WriteLine(_env.EnvironmentName);
}
else
{
Console.WriteLine("Not dev or staging");
}
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
if (_env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
Konvence tříd po spuštění
Když se spustí aplikace ASP.NET Core, spouštěcí třída spustí aplikaci. Aplikace může definovat více Startup
tříd pro různá prostředí. Za běhu je vybrána příslušná Startup
třída. Třída, jejíž přípona názvu odpovídá aktuálnímu prostředí, má prioritu. Startup{EnvironmentName}
Pokud se odpovídající třída nenajde, použije se Startup
třída. Tento přístup je užitečný, když aplikace vyžaduje konfiguraci spuštění pro několik prostředí s mnoha rozdíly v kódu na prostředí. Tento přístup nebudou potřebovat typické aplikace.
Pokud chcete implementovat třídy založené na Startup
prostředí, vytvořte Startup{EnvironmentName}
třídy a náhradní Startup
třídu:
public class StartupDevelopment
{
public StartupDevelopment(IConfiguration configuration)
{
Configuration = configuration;
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType.Name);
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
public class StartupProduction
{
public StartupProduction(IConfiguration configuration)
{
Configuration = configuration;
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType.Name);
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app)
{
app.UseExceptionHandler("/Error");
app.UseHsts();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
Console.WriteLine(MethodBase.GetCurrentMethod().DeclaringType.Name);
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
UseStartup(IWebHostBuilder, String) Použijte přetížení, které přijímá název sestavení:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup(assemblyName);
});
}
}
Konvence metod po spuštění
Konfigurace a konfiguraceServices podporují verze formuláře a formulářů Configure<EnvironmentName>
specifické pro prostředí.Configure<EnvironmentName>Services
Pokud se nenajde shoda Configure<EnvironmentName>Services
nebo metoda, ConfigureServices
použije se příslušná Configure
Configure<EnvironmentName>
metoda. Tento přístup je užitečný, když aplikace vyžaduje konfiguraci spuštění pro několik prostředí s mnoha rozdíly v kódu na prostředí:
public class Startup
{
private void StartupConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void ConfigureDevelopmentServices(IServiceCollection services)
{
MyTrace.TraceMessage();
StartupConfigureServices(services);
}
public void ConfigureStagingServices(IServiceCollection services)
{
MyTrace.TraceMessage();
StartupConfigureServices(services);
}
public void ConfigureProductionServices(IServiceCollection services)
{
MyTrace.TraceMessage();
StartupConfigureServices(services);
}
public void ConfigureServices(IServiceCollection services)
{
MyTrace.TraceMessage();
StartupConfigureServices(services);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
MyTrace.TraceMessage();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
public void ConfigureStaging(IApplicationBuilder app, IWebHostEnvironment env)
{
MyTrace.TraceMessage();
app.UseExceptionHandler("/Error");
app.UseHsts();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
public static class MyTrace
{
public static void TraceMessage([CallerMemberName] string memberName = "")
{
Console.WriteLine($"Method: {memberName}");
}
}