注意
這不是本文的最新版本。 關於目前版本,請參閱 本文的 .NET 10 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支援原則。 如需目前版本,請參閱本文的 .NET 9 版本。
在本機執行應用程式時,環境預設為 Development。 發佈應用程式時,環境預設為 Production。
我們建議使用下列慣例:
總是使用「
Development」環境名稱進行本機開發。 這是因為在設定應用程式和其本機開發執行工具時,ASP.NET Core 架構要求使用確切的名稱。針對測試、預備和生產環境,請一律發佈及部署應用程式。 您可以使用任何您想要用於已發佈的應用程式的環境命名方案,但必須一律使用應用程式設定檔案名稱,其中環境區段的大小寫必須完全符合環境名稱。 針對暫存環境,請使用「
Staging」 (大寫「S」)作為環境名稱,並將應用程式設定檔命名為符合(appsettings.Staging.json)。 針對生產環境,請使用 "Production"(大寫 "P")作為環境名稱,並將應用程式設定檔命名為符合 "appsettings.Production.json"。
設定環境
環境是使用下列任何一種方法來設定:
- Blazor Web App 或 Blazor Server:針對一般 ASP.NET Core 應用程式使用 ASP.NET Core 執行階段環境中 所述的任何方法。
- 任何 Blazor 應用程式: Blazor 啟動設定
- 獨立 Blazor WebAssembly:
<WasmApplicationEnvironmentName>屬性
在 Blazor Web App 客戶端上,環境是透過開發人員不需互動的 HTML 註解,從伺服器判斷。
<!--Blazor-WebAssembly:{"environmentName":"Development", ...}-->
對於獨立 Blazor WebAssembly 應用程式,請在應用程式的專案檔案中使用 <WasmApplicationEnvironmentName> MSBuild 屬性設定環境 (.csproj)。 下列範例會設定 Staging 環境:
<WasmApplicationEnvironmentName>Staging</WasmApplicationEnvironmentName>
默認環境適用於 Development 建置和 Production 發佈。
在建置/發佈操作中,有多種設定獨立 Blazor WebAssembly 應用程式環境的方法,以及一種用於應用程式在用戶端啟動或執行的方法:
當
dotnet build或dotnet publish執行時設定屬性值。 以下範例在 app 發佈時將環境設定為Staging:dotnet publish -p:WasmApplicationEnvironmentName=Staging在建置或發佈時,根據 Visual Studio 應用程式的設定設定屬性。 以下屬性群組可用於應用程式的專案檔案或任何發佈設定檔(
.pubxml)。 為其他正在使用的建構配置新增屬性群組。<PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)' == 'Release'"> <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName> </PropertyGroup>可依據發佈設定檔的使用來設定環境。 以下範例中,第一個條件在沒有使用發佈設定檔時將環境設為
Development(適用於未使用設定檔的建置與發佈操作),而第二個條件則在使用任何發佈設定檔時將環境設為Production。<PropertyGroup Condition="'$(PublishProfile)' == ''"> <WasmApplicationEnvironmentName>Development</WasmApplicationEnvironmentName> </PropertyGroup> <PropertyGroup Condition="'$(PublishProfile)' != ''"> <WasmApplicationEnvironmentName>Production</WasmApplicationEnvironmentName> </PropertyGroup>建立一個自訂的伺服器端網頁 API 端點。 獨立 Blazor WebAssembly 應用程式會在應用程式啟動時或在運行期間按需,向網頁 API 請求其環境。 該值應傳遞給
WebAssemblyStartOptions或withApplicationEnvironment。注意
通常,指向 .NET 參考來源的文件連結會載入存放庫的預設分支,這代表 .NET 下一版本的最新開發進度。 若要選取特定發行版本的標籤,請使用「切換分支或標籤」下拉式清單。 如需詳細資訊,請參閱如何選取 ASP.NET Core 原始程式碼 (dotnet/AspNetCore.Docs #26205) 的版本標籤。
- Blazor Web App 或 Blazor Server:針對一般 ASP.NET Core 應用程式使用 ASP.NET Core 執行階段環境中 所述的任何方法。
- 任何 Blazor 應用程式:
-
Blazor WebAssembly:
Blazor-Environment標題
在 Blazor Web App的客戶端上,環境是由伺服器透過中介軟體決定的,這個中介軟體透過名為 Blazor-Environment的標頭與瀏覽器進行通訊。 在用戶端 WebAssemblyHost 檔案中建立 Program 時,標頭會設定環境(WebAssemblyHostBuilder.CreateDefault)。
針對在本機執行的獨立 Blazor WebAssembly 應用程式,開發伺服器會新增 Blazor-Environment 標頭,其中包含從裝載環境取得的環境名稱。 裝載環境會從專案的 ASPNETCORE_ENVIRONMENT 檔案所建立的 Properties/launchSettings.json 環境變數中設定環境。 從 Blazor WebAssembly 項目樣本建立之項目中環境變數的預設值為 Development。 如需進一步資訊,請參閱「透過標頭設定用戶端環境」的部分。
- Blazor Server:針對一般 ASP.NET Core 應用程式使用 ASP.NET Core 執行階段環境中 所述的任何方法。
- Blazor Server 或 Blazor WebAssembly:
-
Blazor WebAssembly:
Blazor-Environment標題
在裝載 Blazor WebAssembly 應用程式的用戶端上,環境是透過中間件從伺服器決定,而中間件會透過名為 Blazor-Environment的標頭,將環境與瀏覽器通訊。 在用戶端 WebAssemblyHost 檔案中建立 Program 時,標頭會設定環境(WebAssemblyHostBuilder.CreateDefault)。
針對在本機執行的獨立 Blazor WebAssembly 應用程式,開發伺服器會新增 Blazor-Environment 標頭,其中包含從裝載環境取得的環境名稱。 裝載環境會從專案的 ASPNETCORE_ENVIRONMENT 檔案所建立的 Properties/launchSettings.json 環境變數中設定環境。 從 Blazor WebAssembly 項目樣本建立之項目中環境變數的預設值為 Development。 如需進一步資訊,請參閱「透過標頭設定用戶端環境」的部分。
針對在開發階段於本地執行的應用程式,應用程式預設至 Development 環境。 發佈應用程式會將環境預設為 Production。
如需 ASP.NET Core 應用程式設定的一般指引,請參閱 ASP.NET Core 執行階段環境。 如需在開發和測試期間,在環境以外的 Development 環境中使用靜態檔案的伺服器端應用程式設定 (例如, Staging),請參閱 ASP.NET Core 中的靜態檔案。
透過 Blazor 啟動組態設定客戶端環境
如果主機名包含 Blazor,下列範例會在 Staging 環境中啟動 localhost。 否則,環境會設定為其預設值。
Blazor Web App:
<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
if (window.location.hostname.includes("localhost")) {
Blazor.start({
webAssembly: {
environment: "Staging"
}
});
} else {
Blazor.start();
}
</script>
在上述範例中,{BLAZOR SCRIPT} 佔位元是 Blazor 腳本路徑和檔名。 如需腳本的位置,請參閱 ASP.NET Core Blazor 專案結構。
注意
針對在 Blazor Web App 設定中配置 webAssembly>environment 屬性的 Blazor.start,最理想的做法是將伺服器端的環境與在 environment 屬性上設定的環境相匹配。 否則,伺服器上的預先轉譯會在與用戶端上的轉譯不同的環境中運作,這會導致任意效果。 如需設定 Blazor Web App 的一般指南,請參閱 ASP.NET Core 執行階段環境。
獨立 Blazor WebAssembly:
<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
if (window.location.hostname.includes("localhost")) {
Blazor.start({
environment: "Staging"
});
} else {
Blazor.start();
}
</script>
在上述範例中,{BLAZOR SCRIPT} 佔位元是 Blazor 腳本路徑和檔名。 如需腳本的位置,請參閱 ASP.NET Core Blazor 專案結構。
使用 environment 屬性會覆寫 Blazor-Environment 標頭所設定的環境。
上述方法會設定客戶端的環境,而不變更 Blazor-Environment 標頭的值,也不會變更伺服器專案中記錄啟動環境的控制台記錄設定,對於已經採用全域 Interactive WebAssembly 渲染的 Blazor Web App。
若要在獨立的Blazor WebAssembly應用程式或.Client的Blazor Web App專案中將環境記錄到主控台,請在以Program建立WebAssemblyHost後,將下列 C# 程式代碼放在WebAssemblyHostBuilder.CreateDefault檔案中,並在建置並執行專案的行之前(await builder.Build().RunAsync();):
Console.WriteLine(
$"Client Hosting Environment: {builder.HostEnvironment.Environment}");
如需有關 Blazor 啟動的詳細資訊,請參閱 ASP.NET Core Blazor 啟動。
透過標頭設定客戶端環境
Blazor WebAssembly 應用程式可以使用 Blazor-Environment 標頭來設定環境。 具體來說,必須在 _framework/blazor.boot.json 檔案上設置回應標頭,但在其他 Blazor 檔案請求或整個 Blazor 部署的檔案伺服器回應中設置這些標頭並不會造成任何問題。
雖然 Blazor 架構在連字號串燒式大小寫中發出標頭名稱與混合字母大小寫(Blazor-Environment),但歡迎使用全小寫或全大寫的連字號串燒式大小寫(blazor-environment,BLAZOR-ENVIRONMENT)。
使用 Blazor的內建開發伺服器進行本機開發時,您可以在專案的 Blazor-Environment 檔案中設定 ASPNETCORE_ENVIRONMENT 環境變數的值,以控制 Properties/launchSettings.json 標頭的值。 使用開發伺服器在本機執行時,判斷應用程式環境的優先順序是 Blazor.start 組態(environment 索引鍵)>Blazor-Environment 回應標頭(blazor.boot.json 檔案)>ASPNETCORE_ENVIRONMENT 環境變數(launchSettings.json)。 您無法針對已部署 ASPNETCORE_ENVIRONMENT 應用程式使用 launchSettings.json 環境變數 (Blazor WebAssembly) 方法。 這項技術只適用於在本地運行應用程式時的開發伺服器。
IIS
在下列 IIS 範例中,自定義標頭 (Blazor-Environment) 會新增至已發佈的 web.config 檔案。
web.config 檔案位於 bin/Release/{TARGET FRAMEWORK}/publish 資料夾中,其中 {TARGET FRAMEWORK} 占位元符是目標架構:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
...
<httpProtocol>
<customHeaders>
<add name="Blazor-Environment" value="Staging" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
注意
若要使用自定義web.config檔案,以在應用程式發佈至publish資料夾時不被覆寫,請參閱使用 IIS 裝載和部署 ASP.NET CoreBlazor WebAssembly。
Nginx
針對 Nginx 伺服器,請使用來自 add_header的 ngx_http_headers_module 指令:
http {
server {
...
location / {
...
add_header Blazor-Environment "Staging";
}
}
}
如需詳細資訊,請參閱下列資源:
Apache
針對 Apache 伺服器,請使用來自 Header 模組的 mod_headers 指令:
<VirtualHost *:80>
...
Header set Blazor-Environment "Staging"
...
</VirtualHost>
如需詳細資訊,請參閱下列資源:
設定 Azure App Service 的環境
針對獨立 Blazor WebAssembly 應用程式,您可以透過 啟動組態 或 Blazor-Environment 標頭手動設定環境。
針對伺服器端應用程式,透過 Azure 中的 ASPNETCORE_ENVIRONMENT 應用程式設定來設定環境:
確認應用程式設定檔名中的環境區段大小寫完全符合其環境名稱大小寫。 例如,
Staging環境的相符應用程式設定檔名稱appsettings.Staging.json。 如果檔名是appsettings.staging.json(小寫 “s”),則檔案未找到,而且檔案中的設定不會用於Staging環境中。針對 Visual Studio 部署,確認應用程式已部署到正確的部署位置。 針對名為
BlazorAzureAppSample的應用程式,應用程式會部署到Staging部署位置。在環境部署位置的 Azure 入口網站中,使用
ASPNETCORE_ENVIRONMENT應用程式設定來設定環境。 針對名為BlazorAzureAppSample的應用程式,暫存 App Service 插槽會命名為BlazorAzureAppSample/Staging。 針對Staging槽的組態,為ASPNETCORE_ENVIRONMENT建立一個應用程式設定,並將其值設定為Staging。 部署時段設定 已針對該設定啟用。
當在瀏覽器中請求時,BlazorAzureAppSample/Staging 應用程式會在 Staging 環境中載入於 https://blazorazureappsample-staging.azurewebsites.net。
在瀏覽器中載入應用程式時,blazor.boot.json 的回應標頭集合顯示,Blazor-Environment 的標頭值是 Staging。
應用程式會載入來自 appsettings.{ENVIRONMENT}.json 檔案的應用程式設定,其中 {ENVIRONMENT} 占位元是應用程式的環境。 在上述範例中,會載入來自 appsettings.Staging.json 檔案的設定。
在 Blazor WebAssembly 應用程式中讀取環境
藉由插入 IWebAssemblyHostEnvironment 並讀取 Environment 屬性,以取得元件中的應用程式環境。
ReadEnvironment.razor:
@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env
<h1>Environment example</h1>
<p>Environment: @Env.Environment</p>
在 Blazor Web App 中從用戶端側讀取環境
假設元件或應用程式未停用預先設計,則 .Client 專案中的元件會在伺服器上預先呈現。 因為伺服器沒有已註冊的 IWebAssemblyHostEnvironment 服務,所以無法在伺服器預先呈現期間插入服務,並使用服務實作的主機環境擴充方法和屬性。 將服務插入 Interactive WebAssembly 或 Interactive Auto 元件會導致下列運行時間錯誤:
There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.
若要解決此問題,請在伺服器上建立 IWebAssemblyHostEnvironment 的自定義服務實作。 如需詳細資訊和實作範例,請參閱伺服器上的自訂服務實作章節的預先轉譯文章,該章節稍後會出現在文件中Blazor。
在啟動期間讀取客戶端環境
在啟動期間,WebAssemblyHostBuilder 會透過 IWebAssemblyHostEnvironment 屬性公開 HostEnvironment,以啟用主機產生器程式代碼中的環境特定邏輯。
在 Program 檔案中:
if (builder.HostEnvironment.Environment == "Custom")
{
...
};
透過 WebAssemblyHostEnvironmentExtensions 提供的下列便利擴充方法,可以檢查目前環境是否包含 Development、Production、Staging和自定義環境名稱:
在 Program 檔案中:
if (builder.HostEnvironment.IsStaging())
{
...
};
if (builder.HostEnvironment.IsEnvironment("Custom"))
{
...
};
IWebAssemblyHostEnvironment.BaseAddress 服務無法使用時,可以在啟動期間使用 NavigationManager 屬性。