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:

  1. DOTNET_ENVIRONMENT
  2. 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ır DOTNET_ENVIRONMENT .

IHostEnvironment.EnvironmentNameherhangi bir değere ayarlanabilir, ancak aşağıdaki değerler Framework tarafından sağlanır:

Aşağıdaki kod:

  • Olarak ayarlandığında UseDeveloperExceptionPage çağırır ASPNETCORE_ENVIRONMENT Development .
  • Değeri, veya olarak ayarlandığında Useexceptionhandler ASPNETCORE_ENVIRONMENT ' i çağırır Staging Production Staging_2 .
  • İçine çıkarır IWebHostEnvironment Startup.Configure . Bu yaklaşım, uygulama yalnızca Startup.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: &lt;environment include="Development"&gt;</div>
</environment>
<environment exclude="Development">
    <div>The effective tag is: &lt;environment exclude="Development"&gt;</div>
</environment>
<environment include="Staging,Development,Staging_2">
    <div>
        The effective tag is:
        &lt;environment include="Staging,Development,Staging_2"&gt;
    </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.

    Menüdeki IIS Express Başlat

  • EnvironmentsSample: Profil adı proje adıdır. Bu profil, uygulamasının ile başlatılması sırasında varsayılan olarak kullanılır dotnet 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.

Proje özellikleri ayar ortamı değişkenleri

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 run bir komut kabuğu 'nda --launch-profile profil 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:

  1. Uygulama Hizmetleri dikey penceresinden uygulamayı seçin.
  2. Ayarlar grubunda yapılandırma dikey penceresini seçin.
  3. Uygulama ayarları sekmesinde Yeni uygulama ayarı' nı seçin.
  4. Uygulama ayarı Ekle/Düzenle penceresinde ad ' ı belirtin ASPNETCORE_ENVIRONMENT . Name Değeriçin ortamı sağlayın (örneğin, Staging ).
  5. 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 .
  6. Tamam ' ı seçerek uygulama ayarı Ekle/Düzenle penceresini kapatın.
  7. 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 :

    Sistem Gelişmiş Özellikler

    ASPNET Core ortam değişkeni

  • Bir yönetim komut istemi açın ve komutunu kullanın setx veya 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ştirilirse User , 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 /y net start w3svc komut 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 _env alanında tutulur.
  • _env, ve ' de, ConfigureServices Configure uygulamanı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:

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_ENVIRONMENT Development .

  • Değeri aşağıdakilerden birini ayarlandığında Useexceptionhandler ' i çağırır ASPNETCORE_ENVIRONMENT :

    • Staging
    • Production
    • Staging_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: &lt;environment include="Development"&gt;</div>
</environment>
<environment exclude="Development">
    <div>The effective tag is: &lt;environment exclude="Development"&gt;</div>
</environment>
<environment include="Staging,Development,Staging_2">
    <div>
        The effective tag is:
        &lt;environment include="Staging,Development,Staging_2"&gt;
    </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:

  • IISExpress
  • IIS
  • Project(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 özellikleri ayar ortamı değişkenleri

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:

  1. Uygulama Hizmetleri dikey penceresinden uygulamayı seçin.
  2. Ayarlar grubunda yapılandırma dikey penceresini seçin.
  3. Uygulama ayarları sekmesinde Yeni uygulama ayarı' nı seçin.
  4. Uygulama ayarı Ekle/Düzenle penceresinde ad ' ı belirtin ASPNETCORE_ENVIRONMENT . Name Değeriçin ortamı sağlayın (örneğin, Staging ).
  5. 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 .
  6. Tamam ' ı seçerek uygulama ayarı Ekle/Düzenle penceresini kapatın.
  7. 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 :

    Sistem Gelişmiş Özellikler

    ASPNET Core ortam değişkeni

  • Bir yönetim komut istemi açın ve komutunu kullanın setx veya 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ştirilirse User , 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 /y net start w3svc komut 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:

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 _env alanında tutulur.
  • _env, ve ' de, ConfigureServices Configure uygulamanı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();
    }
}

Ek kaynaklar