ASP.NET Core'da birden çok ortam kullanma
Tarafından Rick Anderson ve Kirk larkabağı
ASP.NET Core, bir ortam değişkeni kullanarak çalışma zamanı ortamı temelinde uygulama davranışını yapılandırır.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Ortamlar
Çalışma zamanı ortamını öğrenmek için ASP.NET Core aşağıdaki ortam değişkenlerinden okur:
- DOTNET_ENVIRONMENT
ASPNETCORE_ENVIRONMENTne zaman ConfigureWebHostDefaults çağrılır. Varsayılan ASP.NET Core Web uygulaması şablonları çağrısıConfigureWebHostDefaults.ASPNETCORE_ENVIRONMENTDeğer geçersiz kılınırDOTNET_ENVIRONMENT.
IHostEnvironment.EnvironmentNameherhangi bir değere ayarlanabilir, ancak aşağıdaki değerler Framework tarafından sağlanır:
- Development: Dosya üzerindelaunchSettings.js
ASPNETCORE_ENVIRONMENTDevelopmentYerel makinede olarak ayarlanır. - Staging
- Production: Varsayılan if
DOTNET_ENVIRONMENTveASPNETCORE_ENVIRONMENTayarlanmamışsa.
Aşağıdaki kod:
- Olarak ayarlandığında UseDeveloperExceptionPage çağırır
ASPNETCORE_ENVIRONMENTDevelopment. - Değeri, veya olarak ayarlandığında Useexceptionhandler
ASPNETCORE_ENVIRONMENT' i çağırırStagingProductionStaging_2. - İçine çıkarır IWebHostEnvironment
Startup.Configure. Bu yaklaşım, uygulama yalnızcaStartup.Configure, ortam başına en az kod farklılığı olan birkaç ortam için ayarlama gerektirdiğinde yararlıdır. - , ASP.NET Core şablonları tarafından oluşturulan koda benzerdir.
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();
});
}
Ortam etiketi Yardımcısı , öğesinde biçimlendirme eklemek veya dışlamak Için ıhostenvironment. environmentname değerini kullanır:
<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>
Örnek koddan hakkında sayfası , önceki biçimlendirmeyi içerir ve değerini görüntüler IWebHostEnvironment.EnvironmentName .
Windows ve macOS 'ta, ortam değişkenleri ve değerleri büyük/küçük harfe duyarlı değildir. Linux ortam değişkenleri ve değerleri varsayılan olarak büyük/küçük harfe duyarlıdır .
EnvironmentsSample oluşturma
Bu belgede kullanılan örnek kod , Razor environmentssampleadlı bir sayfalar projesini temel alır.
Aşağıdaki kod Environmentssampleadlı bir Web uygulaması oluşturur ve çalıştırır:
dotnet new webapp -o EnvironmentsSample
cd EnvironmentsSample
dotnet run --verbosity normal
Uygulama çalıştığında, aşağıdaki çıkışın bazılarını görüntüler:
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
Geliştirme ve launchSettings.js
Geliştirme ortamı, üretimde gösterilmemelidir özellikleri etkinleştirebilir. Örneğin, ASP.NET Core Şablonlar geliştirme ortamında Geliştirici özel durum sayfasını etkinleştirir.
Yerel makine geliştirme ortamı, projenin dosyasında Properties\launchSettings.js ayarlanabilir. Sistem ortamında ayarlanan geçersiz kılma değerlerinde launchSettings.js ayarlanan ortam değerleri.
Dosyadaki launchSettings.js :
- Yalnızca yerel geliştirme makinesinde kullanılır.
- Dağıtılmadı.
- profil ayarlarını içerir.
Aşağıdaki JSON, Visual Studio ile oluşturulan ASP.NET Core bir Web tahmini adlı Environmentssample adlı dosyada launchSettings.js göstermektedir 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"
}
}
}
}
Yukarıdaki biçimlendirme iki profil içerir:
IIS Express: Uygulama Visual Studio 'dan başlatılırken kullanılan varsayılan profil."commandName"Anahtarın değeri bulunur"IISExpress", bu nedenle iisexpress Web sunucusudur. Başlatma profilini projeye veya dahil edilen başka bir profile ayarlayabilirsiniz. Örneğin, aşağıdaki görüntüde, proje adının seçilmesi Kestrel Web sunucusunubaşlatır.
EnvironmentsSample: Profil adı proje adıdır. Bu profil, uygulamasının ile başlatılması sırasında varsayılan olarak kullanılırdotnet run."commandName"Anahtarın değeri bulunur"Project", bu nedenle Kestrel Web sunucusu başlatılır.
Değeri, commandName başlatılacak Web sunucusunu belirtebilir. commandNameaşağıdakilerden biri olabilir:
IISExpress: IIS Express başlatır.IIS: Web sunucusu başlatılmadı. IIS 'nin kullanılabilir olması bekleniyor.Project: Kestrel başlatır.
Visual Studio proje özellikleri hata ayıklama sekmesi, dosyadaki launchSettings.js düzenlemek için bir GUI sağlar. Proje profillerinde yapılan değişiklikler, Web sunucusu yeniden başlatılana kadar etkili olmayabilir. Kestrel, ortamında yapılan değişiklikleri algılayabilmesi için yeniden başlatılmalıdır.

Dosyadaki şu launchSettings.js birden çok profil var:
{
"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"
}
}
}
}
Profiller seçilebilir:
Visual Studio kullanıcı arabiriminden.
Komutu
dotnet runbir komut kabuğu 'nda--launch-profileprofil adına ayarlanmış seçeneğiyle kullanma. Bu yaklaşım yalnızca Kestrel profillerini destekler.dotnet run --launch-profile "SampleApp"
Uyarı
launchSettings.js , gizli dizileri depolamamamalıdır. Gizli anahtar geliştirme için gizli dizileri depolamak için gizli dizi Yöneticisi aracı kullanılabilir.
Visual Studio Codekullanırken, ortam değişkenleri dosyadaki . vscode/launch.js ayarlanabilir. Aşağıdaki örnek, çeşitli konak yapılandırma değerleri ortam değişkenleriniayarlar:
{
"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.
Dosyadaki . vscode/launch.js yalnızca Visual Studio Code tarafından kullanılır.
Üretim
Üretim ortamının güvenliği, performansıve uygulama sağlamlık düzeyini en üst düzeye çıkarmak için yapılandırılması gerekir. Geliştirmeden farklı bazı yaygın ayarlar şunlardır:
- Önbelleğe alma.
- İstemci tarafı kaynaklar paketlenmiş, küçültülmüş ve potansiyel olarak bir CDN 'den sunulan.
- Tanılama hata sayfaları devre dışı.
- Kolay hata sayfaları etkin.
- Üretim günlüğü ve izleme etkin. Örneğin, Application Insightskullanma.
Ortamı ayarlama
Bir ortam değişkeni veya platform ayarıyla test için belirli bir ortam ayarlamak genellikle yararlıdır. Ortam ayarlanmamışsa, Production çoğu hata ayıklama özelliğini devre dışı bırakan varsayılan olarak olur. Ortamı ayarlama yöntemi işletim sistemine bağlıdır.
Konak yapılandırıldığında, uygulama tarafından okunan son ortam ayarı, uygulamanın ortamını belirler. Uygulama çalışırken uygulamanın ortamı değiştirilemez.
Örnek koddan hakkında sayfasında değerini gösterir IWebHostEnvironment.EnvironmentName .
Azure App Service
Azure App Serviceortamında ortamı ayarlamak için aşağıdaki adımları gerçekleştirin:
- Uygulama Hizmetleri dikey penceresinden uygulamayı seçin.
- Ayarlar grubunda yapılandırma dikey penceresini seçin.
- Uygulama ayarları sekmesinde Yeni uygulama ayarı' nı seçin.
- Uygulama ayarı Ekle/Düzenle penceresinde ad ' ı belirtin
ASPNETCORE_ENVIRONMENT. Name Değeriçin ortamı sağlayın (örneğin,Staging). - Dağıtım yuvaları takas edildiğinde ortam ayarının geçerli yuvada kalmasını istiyorsanız dağıtım yuvası ayarını onay kutusunu işaretleyin. Daha fazla bilgi için bkz. Azure belgelerindeki Azure App Service hazırlama ortamlarını ayarlama .
- Tamam ' ı seçerek uygulama ayarı Ekle/Düzenle penceresini kapatın.
- Yapılandırma dikey penceresinin en üstünde Kaydet ' i seçin.
Azure App Service, Azure portal bir uygulama ayarı eklendikten, değiştirildikten veya silindikten sonra uygulamayı otomatik olarak yeniden başlatır.
Windows
Sistem ortamında ayarlanan geçersiz kılma değerleri üzerindelaunchSettings.js ortam değerleri.
ASPNETCORE_ENVIRONMENTUygulama DotNet çalıştırmasıkullanılarak başlatıldığında geçerli oturum için öğesini ayarlamak için aşağıdaki komutlar kullanılır:
Komut istemi
set ASPNETCORE_ENVIRONMENT=Staging
dotnet run --no-launch-profile
PowerShell
$Env:ASPNETCORE_ENVIRONMENT = "Staging"
dotnet run --no-launch-profile
Önceki komut ASPNETCORE_ENVIRONMENT yalnızca bu komut penceresinden başlatılan süreçler için ayarlar.
Windows 'da genel değeri ayarlamak için aşağıdaki yaklaşımlardan birini kullanın:
Denetim Masası > sistem > Gelişmiş sistem ayarları ' nı açın ve değeri ekleyin veya düzenleyin
ASPNETCORE_ENVIRONMENT:

Bir yönetim komut istemi açın ve komutunu kullanın
setxveya bir yönetim PowerShell komut istemi açın ve şunu kullanın[Environment]::SetEnvironmentVariable:Komut istemi
setx ASPNETCORE_ENVIRONMENT Staging /M/MAnahtar, ortam değişkenini sistem düzeyinde ayarlamaya yönelik olduğunu gösterir./MAnahtar kullanılmazsa, ortam değişkeni Kullanıcı hesabı için ayarlanır.PowerShell
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Staging", "Machine")MachineSeçenek değeri, ortam değişkeninin sistem düzeyinde ayarlandığını gösterir. Seçenek değeri olarak değiştirilirseUser, ortam değişkeni Kullanıcı hesabı için ayarlanır.
ASPNETCORE_ENVIRONMENTOrtam değişkeni genel olarak ayarlandığında, dotnet run değer ayarlandıktan sonra açılan herhangi bir komut penceresinde için geçerli olur. Sistem ortamında ayarlanan geçersiz kılma değerleri üzerindelaunchSettings.js ortam değerleri.
web.config
ASPNETCORE_ENVIRONMENTOrtam değişkenini web.configolarak ayarlamak için, ortam değişkenlerini ayarlama bölümüne bakın ASP.NET Core Modülü .
Proje dosyası veya yayımlama profili
WINDOWS IIS dağıtımları için: <EnvironmentName>Özelliği Publish profile (. pubxml) veya proje dosyasına ekleyin. Bu yaklaşım, proje yayımlandığında web.config ortamı ayarlar:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
IIS uygulama havuzu başına
ASPNETCORE_ENVIRONMENTYalıtılmış bir uygulama havuzunda çalışan bir uygulamanın ortam değişkenini ayarlamak için (ııs 10,0 veya üzeri sürümlerde desteklenir), ortam değişkenleri < > environmentvariables konusunun AppCmd.exe komut bölümüne bakın. ASPNETCORE_ENVIRONMENTOrtam değişkeni bir uygulama havuzu için ayarlandığında, değeri sistem düzeyindeki bir ayarı geçersiz kılar.
IIS 'de bir uygulama barındırırken ve ortam değişkenini eklerken ya da değiştirirken ASPNETCORE_ENVIRONMENT , yeni değerin uygulamalar tarafından çekilmek için aşağıdaki yaklaşımlardan birini kullanın:
- ' İ
net stop was /ynet start w3svckomut isteminden sonra yürütün. - Sunucuyu yeniden başlatın.
macOS
MacOS için geçerli ortamın ayarlanması, uygulamayı çalıştırırken satır içinde gerçekleştirilebilir:
ASPNETCORE_ENVIRONMENT=Staging dotnet run
Alternatif olarak, export uygulamayı çalıştırmadan önce ortamı olarak ayarlayın:
export ASPNETCORE_ENVIRONMENT=Staging
Makine düzeyinde ortam değişkenleri . bashrc veya . bash_profile dosyasında ayarlanır. Herhangi bir metin düzenleyicisini kullanarak dosyayı düzenleyin. Aşağıdaki ifadeyi ekleyin:
export ASPNETCORE_ENVIRONMENT=Staging
Linux
Linux dağıtımları için, export oturum tabanlı değişken ayarları ve makine düzeyi ortam ayarları için bash_profile dosyası için komut isteminde komutunu kullanın.
Kodda ortam ayarlama
UseEnvironmentAna bilgisayarı derlerken çağırın. Bkz. ASP.NET Core .NET genel ana bilgisayarı.
Ortama göre yapılandırma
Yapılandırmayı ortama göre yüklemek için bkz ASP.NET Core'de yapılandırma ..
Ortam tabanlı başlangıç sınıfı ve yöntemleri
Başlangıç sınıfına ıwebhostenvironment ekleme
IWebHostEnvironment Startup Oluşturucuya ekleme. Bu yaklaşım, uygulama Startup her ortam için en az kod farklılığı olan birkaç ortam için yapılandırma gerektirdiğinde yararlıdır.
Aşağıdaki örnekte:
- Ortam
_envalanında tutulur. _env, ve ' de,ConfigureServicesConfigureuygulamanın ortamına göre başlangıç yapılandırması uygulamak için kullanılır.
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();
});
}
}
Başlangıç sınıfı kuralları
ASP.NET Core bir uygulama başlatıldığında, Başlangıç sınıfı uygulamayı önyükleme. Uygulama, Startup farklı ortamlar için birden çok sınıf tanımlayabilir. Çalışma zamanında uygun Startup sınıf seçildi. Geçerli ortamla eşleşen ad sonekine sahip olan sınıf önceliklendirilir. Eşleşen bir Startup{EnvironmentName} sınıf bulunamazsa Startup sınıf kullanılır. Bu yaklaşım, uygulama başına çok sayıda kod farklılığı olan birkaç ortam için başlangıç yapılandırması gerektirdiğinde yararlıdır. Tipik uygulamalar bu yaklaşıma ihtiyaç duymayacak.
Ortam tabanlı sınıfları uygulamak için Startup bir Startup{EnvironmentName} sınıflar ve geri dönüş Startup sınıfı oluşturun:
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();
});
}
}
Derleme adını kabul eden Usestartup (ıwebhostbuilder, String) aşırı yüklemesini kullanın:
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);
});
}
}
Başlangıç yöntemi kuralları
Yapılandırma ve ConfigureServices , formun ve ortama özgü sürümlerini destekler Configure<EnvironmentName> Configure<EnvironmentName>Services . Bu yaklaşım, uygulama başına çok sayıda kod farklılığı olan birkaç ortam için başlangıç yapılandırması gerektirdiğinde yararlı olur:
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}");
}
}
Ek kaynaklar
Gönderen Rick Anderson
ASP.NET Core, bir ortam değişkeni kullanarak çalışma zamanı ortamı temelinde uygulama davranışını yapılandırır.
Örnek kodu görüntüleme veya indirme (nasıl indirileceği)
Ortamlar
ASP.NET Core, uygulama başlangıcında ortam değişkenini okur ASPNETCORE_ENVIRONMENT ve değeri ıhostingenvironment. EnvironmentNameiçinde depolar. ASPNETCORE_ENVIRONMENTherhangi bir değere ayarlanabilir, ancak Framework tarafından üç değer sağlanır:
- Development
- Staging
- Productionvarsayılanını
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseMvc();
}
Yukarıdaki kod:
Olarak ayarlandığında UseDeveloperExceptionPage çağırır
ASPNETCORE_ENVIRONMENTDevelopment.Değeri aşağıdakilerden birini ayarlandığında Useexceptionhandler ' i çağırır
ASPNETCORE_ENVIRONMENT:StagingProductionStaging_2
Ortam etiketi Yardımcısı , IHostingEnvironment.EnvironmentName öğesinde biçimlendirme eklemek veya dışlamak için değerini kullanır:
<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>
Windows ve macOS 'ta, ortam değişkenleri ve değerleri büyük/küçük harfe duyarlı değildir. Linux ortam değişkenleri ve değerleri varsayılan olarak büyük/küçük harfe duyarlıdır.
Geliştirme
Geliştirme ortamı, üretimde gösterilmemelidir özellikleri etkinleştirebilir. Örneğin, ASP.NET Core Şablonlar geliştirme ortamında Geliştirici özel durum sayfasını etkinleştirir.
Yerel makine geliştirme ortamı, projenin dosyasında Properties\launchSettings.js ayarlanabilir. Sistem ortamında ayarlanan geçersiz kılma değerlerinde launchSettings.js ayarlanan ortam değerleri.
Aşağıdaki JSON dosyadaki bir launchSettings.js üç profil göstermektedir:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:54339/",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_My_Environment": "1",
"ASPNETCORE_DETAILEDERRORS": "1",
"ASPNETCORE_ENVIRONMENT": "Staging"
}
},
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://localhost:54340/"
},
"Kestrel Staging": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_My_Environment": "1",
"ASPNETCORE_DETAILEDERRORS": "1",
"ASPNETCORE_ENVIRONMENT": "Staging"
},
"applicationUrl": "http://localhost:51997/"
}
}
}
Not
applicationUrl launchSettings.jsüzerindeki özelliği sunucu URL 'lerinin bir listesini belirtebilir. Listedeki URL 'Ler arasında noktalı virgül kullanın:
"EnvironmentsSample": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
Uygulama DotNet çalıştırmasıile başlatıldığında, ile ilk profil "commandName": "Project" kullanılır. Değeri, commandName başlatılacak Web sunucusunu belirtir. commandNameaşağıdakilerden biri olabilir:
IISExpressIISProject(Kestrel Başlatan)
Bir uygulama DotNet çalıştırmasıile başlatıldığında:
- launchSettings.json , varsa okundu.
environmentVariablesgeçersiz kılma ortamı değişkenlerinde launchSettings.js ayarları. - Barındırma ortamı görüntülenir.
Aşağıdaki çıktıda, DotNet çalıştırmasıile başlatılan bir uygulama gösterilmektedir:
PS C:\Websites\EnvironmentsSample> dotnet run
Using launch settings from C:\Websites\EnvironmentsSample\Properties\launchSettings.json...
Hosting environment: Staging
Content root path: C:\Websites\EnvironmentsSample
Now listening on: http://localhost:54340
Application started. Press Ctrl+C to shut down.
Visual Studio proje özellikleri hata ayıklama sekmesi, dosyadaki launchSettings.js düzenlemek için bir GUI sağlar:

Proje profillerinde yapılan değişiklikler, Web sunucusu yeniden başlatılana kadar etkili olmayabilir. Kestrel, ortamında yapılan değişiklikleri algılayabilmesi için yeniden başlatılmalıdır.
Uyarı
launchSettings.js , gizli dizileri depolamamamalıdır. Gizli anahtar geliştirme için gizli dizileri depolamak için gizli dizi Yöneticisi aracı kullanılabilir.
Visual Studio Codekullanırken, ortam değişkenleri dosyadaki . vscode/launch.js ayarlanabilir. Aşağıdaki örnek, ortamı şu şekilde ayarlar Development :
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Launch (web)",
... additional VS Code configuration settings ...
"env": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
]
}
Projedeki bir . vscode/launch.js , uygulama, dotnet run Özellikler/launchSettings.jsile aynı şekilde başlatılırken okunamaz. Geliştirmede launchSettings.js olmayan bir uygulama başlatırken, ortama bir ortam değişkeni veya bir komut satırı bağımsız değişkeni ile ayarlayın dotnet run .
Üretim
Üretim ortamının güvenliği, performansı ve uygulama sağlamlık düzeyini en üst düzeye çıkarmak için yapılandırılması gerekir. Geliştirmeden farklı bazı yaygın ayarlar şunlardır:
- Önbelleği.
- İstemci tarafı kaynaklar paketlenmiş, küçültülmüş ve potansiyel olarak bir CDN 'den sunulan.
- Tanılama hata sayfaları devre dışı.
- Kolay hata sayfaları etkin.
- Üretim günlüğü ve izleme etkin. Örneğin, Application Insights.
Ortamı ayarlama
Bir ortam değişkeni veya platform ayarıyla test için belirli bir ortam ayarlamak genellikle yararlıdır. Ortam ayarlanmamışsa, Production çoğu hata ayıklama özelliğini devre dışı bırakan varsayılan olarak olur. Ortamı ayarlama yöntemi işletim sistemine bağlıdır.
Konak yapılandırıldığında, uygulama tarafından okunan son ortam ayarı, uygulamanın ortamını belirler. Uygulama çalışırken uygulamanın ortamı değiştirilemez.
Ortam değişkeni veya platform ayarı
Azure App Service
Azure App Serviceortamında ortamı ayarlamak için aşağıdaki adımları gerçekleştirin:
- Uygulama Hizmetleri dikey penceresinden uygulamayı seçin.
- Ayarlar grubunda yapılandırma dikey penceresini seçin.
- Uygulama ayarları sekmesinde Yeni uygulama ayarı' nı seçin.
- Uygulama ayarı Ekle/Düzenle penceresinde ad ' ı belirtin
ASPNETCORE_ENVIRONMENT. Name Değeriçin ortamı sağlayın (örneğin,Staging). - Dağıtım yuvaları takas edildiğinde ortam ayarının geçerli yuvada kalmasını istiyorsanız dağıtım yuvası ayarını onay kutusunu işaretleyin. Daha fazla bilgi için bkz. Azure belgelerindeki Azure App Service hazırlama ortamlarını ayarlama .
- Tamam ' ı seçerek uygulama ayarı Ekle/Düzenle penceresini kapatın.
- Yapılandırma dikey penceresinin en üstünde Kaydet ' i seçin.
Azure App Service, Azure portal bir uygulama ayarı (ortam değişkeni) eklendikten, değiştirildikten veya silindikten sonra uygulamayı otomatik olarak yeniden başlatır.
Windows
ASPNETCORE_ENVIRONMENTUygulama DotNet çalıştırmasıkullanılarak başlatıldığında geçerli oturum için öğesini ayarlamak için aşağıdaki komutlar kullanılır:
Komut istemi
set ASPNETCORE_ENVIRONMENT=Development
PowerShell
$Env:ASPNETCORE_ENVIRONMENT = "Development"
Bu komutlar yalnızca geçerli pencere için etkili olur. Pencere kapatıldığında, ASPNETCORE_ENVIRONMENT ayar varsayılan ayar veya makine değerine döner.
Windows 'da genel değeri ayarlamak için aşağıdaki yaklaşımlardan birini kullanın:
Denetim Masası > sistem > Gelişmiş sistem ayarları ' nı açın ve değeri ekleyin veya düzenleyin
ASPNETCORE_ENVIRONMENT:

Bir yönetim komut istemi açın ve komutunu kullanın
setxveya bir yönetim PowerShell komut istemi açın ve şunu kullanın[Environment]::SetEnvironmentVariable:Komut istemi
setx ASPNETCORE_ENVIRONMENT Development /M/MAnahtar, ortam değişkenini sistem düzeyinde ayarlamaya yönelik olduğunu gösterir./MAnahtar kullanılmazsa, ortam değişkeni Kullanıcı hesabı için ayarlanır.PowerShell
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")MachineSeçenek değeri, ortam değişkeninin sistem düzeyinde ayarlandığını gösterir. Seçenek değeri olarak değiştirilirseUser, ortam değişkeni Kullanıcı hesabı için ayarlanır.
ASPNETCORE_ENVIRONMENTOrtam değişkeni genel olarak ayarlandığında, dotnet run değer ayarlandıktan sonra açılan herhangi bir komut penceresinde için geçerli olur.
web.config
ASPNETCORE_ENVIRONMENTOrtam değişkenini web.configolarak ayarlamak için, ortam değişkenlerini ayarlama bölümüne bakın ASP.NET Core Modülü .
Proje dosyası veya yayımlama profili
WINDOWS IIS dağıtımları için: <EnvironmentName>Özelliği Publish profile (. pubxml) veya proje dosyasına ekleyin. Bu yaklaşım, proje yayımlandığında web.config ortamı ayarlar:
<PropertyGroup>
<EnvironmentName>Development</EnvironmentName>
</PropertyGroup>
IIS uygulama havuzu başına
ASPNETCORE_ENVIRONMENTYalıtılmış bir uygulama havuzunda çalışan bir uygulamanın ortam değişkenini ayarlamak için (ııs 10,0 veya üzeri sürümlerde desteklenir), ortam değişkenleri < > environmentvariables konusunun AppCmd.exe komut bölümüne bakın. ASPNETCORE_ENVIRONMENTOrtam değişkeni bir uygulama havuzu için ayarlandığında, değeri sistem düzeyindeki bir ayarı geçersiz kılar.
Önemli
IIS 'de bir uygulama barındırırken ve ortam değişkenini eklerken ya da değiştirirken ASPNETCORE_ENVIRONMENT , yeni değerin uygulamalar tarafından çekilmek için aşağıdaki yaklaşımlardan birini kullanın:
- ' İ
net stop was /ynet start w3svckomut isteminden sonra yürütün. - Sunucuyu yeniden başlatın.
macOS
MacOS için geçerli ortamın ayarlanması, uygulamayı çalıştırırken satır içinde gerçekleştirilebilir:
ASPNETCORE_ENVIRONMENT=Development dotnet run
Alternatif olarak, export uygulamayı çalıştırmadan önce ortamı olarak ayarlayın:
export ASPNETCORE_ENVIRONMENT=Development
Makine düzeyinde ortam değişkenleri . bashrc veya . bash_profile dosyasında ayarlanır. Herhangi bir metin düzenleyicisini kullanarak dosyayı düzenleyin. Aşağıdaki ifadeyi ekleyin:
export ASPNETCORE_ENVIRONMENT=Development
Linux
Linux dağıtımları için, export oturum tabanlı değişken ayarları ve makine düzeyi ortam ayarları için bash_profile dosyası için komut isteminde komutunu kullanın.
Kodda ortam ayarlama
UseEnvironmentAna bilgisayarı derlerken çağırın. Bkz. ASP.NET Core Web ana bilgisayarı.
Ortama göre yapılandırma
Yapılandırmayı ortama göre yüklemek için şunları yapmanızı öneririz:
- appSettings dosyaları (appSettings. { Environment}. JSON). Bkz. ASP.NET Core'de yapılandırma.
- Ortam değişkenleri (uygulamanın barındırıldığı her bir sistemde ayarlanır). Bkz ASP.NET Core Web ana bilgisayarı Kasa geliştirme aşamasında uygulama gizli dizilerinin depolanması ASP.NET Core . ve.
- Gizli dizi Yöneticisi (yalnızca geliştirme ortamında). Bkz. Kasa geliştirme aşamasında uygulama gizli dizilerinin depolanması ASP.NET Core.
Ortam tabanlı başlangıç sınıfı ve yöntemleri
Startup.Configure 'a ıhostingenvironment ekleme
IHostingEnvironmentİçine Ekle Startup.Configure . Bu yaklaşım, uygulama yalnızca Startup.Configure , ortam başına en az kod farklılığı olan birkaç ortam için yapılandırma gerektirdiğinde yararlıdır.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
// Development environment code
}
else
{
// Code for all other environments
}
}
Başlangıç sınıfına ıhostingenvironment ekleme
IHostingEnvironment Startup Oluşturucuya ekleyin ve sınıfın tamamında kullanmak üzere bir alana hizmeti atayın Startup . Bu yaklaşım, uygulama her ortam için en az kod farklılığı olan birkaç ortam için başlatma yapılandırması gerektirdiğinde faydalıdır.
Aşağıdaki örnekte:
- Ortam
_envalanında tutulur. _env, ve ' de,ConfigureServicesConfigureuygulamanın ortamına göre başlangıç yapılandırması uygulamak için kullanılır.
public class Startup
{
private readonly IHostingEnvironment _env;
public Startup(IHostingEnvironment env)
{
_env = env;
}
public void ConfigureServices(IServiceCollection services)
{
if (_env.IsDevelopment())
{
// Development environment code
}
else if (_env.IsStaging())
{
// Staging environment code
}
else
{
// Code for all other environments
}
}
public void Configure(IApplicationBuilder app)
{
if (_env.IsDevelopment())
{
// Development environment code
}
else
{
// Code for all other environments
}
}
}
Başlangıç sınıfı kuralları
ASP.NET Core bir uygulama başlatıldığında, Başlangıç sınıfı uygulamayı önyükleme. Uygulama Startup farklı ortamlar için ayrı sınıflar tanımlayabilir (örneğin, StartupDevelopment ). Çalışma zamanında uygun Startup sınıf seçildi. Geçerli ortamla eşleşen ad sonekine sahip olan sınıf önceliklendirilir. Eşleşen bir Startup{EnvironmentName} sınıf bulunamazsa Startup sınıf kullanılır. Bu yaklaşım, uygulama başına çok sayıda kod farklılığı olan birkaç ortam için başlangıç yapılandırması gerektirdiğinde yararlıdır.
Ortam tabanlı sınıfları uygulamak için Startup , Startup{EnvironmentName} Kullanımdaki her ortam için bir sınıf ve bir geri dönüş sınıfı oluşturun Startup :
// Startup class to use in the Development environment
public class StartupDevelopment
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
}
}
// Startup class to use in the Production environment
public class StartupProduction
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
}
}
// Fallback Startup class
// Selected if the environment doesn't match a Startup{EnvironmentName} class
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
}
}
Derleme adını kabul eden Usestartup (ıwebhostbuilder, String) aşırı yüklemesini kullanın:
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var assemblyName = typeof(Startup).GetTypeInfo().Assembly.FullName;
return WebHost.CreateDefaultBuilder(args)
.UseStartup(assemblyName);
}
Başlangıç yöntemi kuralları
Yapılandırma ve ConfigureServices , formun ve ortama özgü sürümlerini destekler Configure<EnvironmentName> Configure<EnvironmentName>Services . Bu yaklaşım, uygulama başına çok sayıda kod farklılığı olan birkaç ortam için başlangıç yapılandırması gerektirdiğinde yararlıdır.
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
StartupConfigureServices(services);
}
public void ConfigureStagingServices(IServiceCollection services)
{
StartupConfigureServices(services);
}
private void StartupConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseMvc();
}
public void ConfigureStaging(IApplicationBuilder app, IHostingEnvironment env)
{
if (!env.IsStaging())
{
throw new Exception("Not staging.");
}
app.UseExceptionHandler("/Error");
app.UseStaticFiles();
app.UseMvc();
}
}