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í:

  1. DOTNET_ENVIRONMENT
  2. ASPNETCORE_ENVIRONMENT při zavolání WebApplication.CreateBuilder metody. Výchozí ASP.NET šablony webové aplikace Core volají WebApplication.CreateBuilder. Hodnota ASPNETCORE_ENVIRONMENT přepíše DOTNET_ENVIRONMENT.

Pokud chcete určit prostředí runtime, ASP.NET Core čte z následujících proměnných prostředí:

  1. DOTNET_ENVIRONMENT
  2. ASPNETCORE_ENVIRONMENT při zavolání WebApplication.CreateBuilder metody. Výchozí ASP.NET šablony webové aplikace Core volají WebApplication.CreateBuilder. Hodnota DOTNET_ENVIRONMENT se přepíše ASPNETCORE_ENVIRONMENT při WebApplicationBuilder použití. U jiných hostitelů, například ConfigureWebHostDefaults a WebHost.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 na Development místní počítač.
  • Staging
  • Production: Výchozí hodnota, pokud DOTNET_ENVIRONMENT nebyla nastavena a ASPNETCORE_ENVIRONMENT nebyla nastavena.

Následující kód:

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.jsonsoučástí . Například na následujícím obrázku vyberete název projektu, který spustí Kestrel webový server.

Spuštění služby IIS Express v nabídce

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í.

Nastavení proměnných prostředí vlastností projektu

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ří:

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í Productionhodnota , 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:

  1. Vyberte aplikaci ze stránky App Services .
  2. Ve skupině Nastavení vyberte Proměnné prostředí.
  3. Na kartě Nastavení aplikace vyberte + Přidat.
  4. V okně Pro přidání nebo úpravu nastavení aplikace zadejte ASPNETCORE_ENVIRONMENT název. Jako hodnotu zadejte prostředí (například Staging).
  5. 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.
  6. Kliknutím na tlačítko OK zavřete dialogové okno pro nastavení aplikace Přidat nebo upravit.
  7. 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:

    Rozšířené vlastnosti systému

    Proměnná prostředí ASPNET Core

  • 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í na User, 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í:

  1. DOTNET_ENVIRONMENT
  2. ASPNETCORE_ENVIRONMENT je ConfigureWebHostDefaults volána. Výchozí ASP.NET šablony webové aplikace Core volají ConfigureWebHostDefaults. Hodnota ASPNETCORE_ENVIRONMENT přepíše DOTNET_ENVIRONMENT.

IHostEnvironment.EnvironmentName lze nastavit na libovolnou hodnotu, ale architektura poskytuje následující hodnoty:

  • Development : Soubor launchSettings.json se nastaví ASPNETCORE_ENVIRONMENT na Development místní počítač.
  • Staging
  • Production : Výchozí hodnota, pokud DOTNET_ENVIRONMENT nebyla nastavena a ASPNETCORE_ENVIRONMENT nebyla nastavena.

Následující kód:

  • Volání UseDeveloperExceptionPage , pokud ASPNETCORE_ENVIRONMENT je nastavena na Developmenthodnotu .
  • Volání UseExceptionHandler , pokud je hodnota ASPNETCORE_ENVIRONMENT nastavena na Staging, Productionnebo Staging_2.
  • IWebHostEnvironment Vloží do Startup.Configure. Tento přístup je užitečný, když aplikace vyžaduje úpravy Startup.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.

    Spuštění služby IIS Express v nabídce

  • 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 runaplikace . 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í.

Nastavení proměnných prostředí vlastností projektu

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ří:

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í Productionhodnota , 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:

  1. V okně App Services vyberte aplikaci.
  2. Ve skupině Nastavení vyberte okno Konfigurace.
  3. Na kartě Nastavení aplikace vyberte Nové nastavení aplikace.
  4. V okně Pro přidání nebo úpravu nastavení aplikace zadejte ASPNETCORE_ENVIRONMENT název. Jako hodnotu zadejte prostředí (například Staging).
  5. 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.
  6. Výběrem možnosti OK zavřete okno pro nastavení aplikace Přidat nebo upravit.
  7. 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:

    Rozšířené vlastnosti systému

    Proměnná prostředí ASPNET Core

  • 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í na User, 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á k ConfigureServices 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}");
    }
}

Další materiály