備註
這不是本文的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。
警告
不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。
本文說明如何裝載和部署 Blazor WebAssembly 應用程式。
- Blazor 應用程式、其相依性以及 .NET 執行階段會平行下載至瀏覽器中。
- 應用程式會直接在瀏覽器 UI 執行緒上執行。
本文與 Blazor 應用程式放在靜態裝載的網頁伺服器或服務上,且未使用 .NET 來提供 Blazor 應用程式的部署案例有關。 此策略涵蓋於獨立 部署 一節,以及此節點中 IIS、Azure 服務、Apache、Nginx 和 GitHub Pages 的其他文章。
支援的部署策略如下:
- Blazor 應用程式由 ASP.NET Core 應用程式提供。 此策略已於搭配 ASP.NET Core 的已裝載部署一節中涵蓋。
- Blazor 應用程式放在靜態裝載的網頁伺服器或服務上,且未使用 .NET 來提供 Blazor 應用程式。 此策略的說明請見獨立部署一節,該節包含以 IIS 子應用程式的形式來裝載 Blazor WebAssembly 應用程式的相關資訊。
- ASP.NET Core 應用程式裝載多個 Blazor WebAssembly 應用程式。 如需詳細資訊,請參閱多個裝載的 ASP.NET Core Blazor WebAssembly 應用程式。
子網域和 IIS 子應用程式裝載
子網域裝載不需要應用程式的特殊設定。 您不需要設定應用程式基礎路徑 (<base>
中的 wwwroot/index.html
標籤),以在子網域裝載應用程式。
IIS 子應用程式裝載需要您設定應用程式基礎路徑。 如需有關 IIS 子應用程式裝載之進一步指導的詳細資訊和交叉連結,請參閱裝載和部署 ASP.NET CoreBlazor。
降低某些行動裝置瀏覽器的最大堆積內存大小
建置在用戶端 (Blazor 的 .Client
專案或獨立 Blazor Web App 應用程式) 上執行,並以行動裝置瀏覽器 (尤其是 iOS 上的 Safari) 為目標的 Blazor WebAssembly 應用程式時,可能需要使用 MSBuild 屬性 EmccMaximumHeapSize
來減少應用程式的最大記憶體。 預設值為 2,147,483,648 個位元組 (該值可能太大),如果應用程式嘗試配置更多記憶體而瀏覽器無法授與它,則會導致應用程式損毀。 下列範例會在 Program
檔案中將該值設為 268,435,456 個位元組:
建置以行動裝置瀏覽器 (尤其是 iOS 上的 Safari) 為目標的 Blazor WebAssembly 應用程式時,可能需要使用 MSBuild 屬性 EmccMaximumHeapSize
來減少應用程式的最大記憶體。 預設值為 2,147,483,648 個位元組 (該值可能太大),如果應用程式嘗試配置更多記憶體而瀏覽器無法授與它,則會導致應用程式損毀。 下列範例會在 Program
檔案中將該值設為 268,435,456 個位元組:
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
如需 Mono/WebAssembly MSBuild 屬性和目標的相關資訊,請參閱 WasmApp.Common.targets
(dotnet/runtime
GitHub 存放庫)。
.NET 組件的 Webcil 封裝格式
Webcil 是適用於 .NET 組件的網頁式封裝格式,其設計是為了讓您能在受限制的網路環境中使用 Blazor WebAssembly。 Webcil 檔案使用標準的 WebAssembly 包裝函式,組件會部署為使用標準 .wasm
副檔名的 WebAssembly 檔案。
當您發行 Blazor WebAssembly 應用程式時,Webcil 是預設的封裝格式。 若要停止使用 Webcil,請在應用程式的專案檔中設定下列 MSBuild 屬性:
<PropertyGroup>
<WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>
自訂開機資源的載入方式
請使用 loadBootResource
API 來自訂開機資源的載入方式。 如需詳細資訊,請參閱 ASP.NET Core Blazor 啟動。
壓縮
在發行 Blazor WebAssembly 應用程式時,系統會在發行期間以靜態方式壓縮輸出,以減少應用程式的大小,並去除執行階段的壓縮負荷。 系統會使用下列壓縮演算法:
Blazor 依賴主機來提供適當壓縮的檔案。 在裝載 Blazor WebAssembly 獨立應用程式時,可能需要執行額外的工作以確保系統會提供以靜態方式壓縮的檔案:
Blazor 依賴主機來提供適當壓縮的檔案。 在使用 ASP.NET Core 裝載的Blazor WebAssembly 專案時,主機專案能夠執行內容交涉並提供以靜態方式壓縮的檔案。 在裝載 Blazor WebAssembly 獨立應用程式時,可能需要執行額外的工作以確保系統會提供以靜態方式壓縮的檔案:
- 若為 IIS
web.config
壓縮設定,請參閱 IIS:Brotli 和 Gzip 壓縮 一節。 - 在不支援靜態壓縮檔案內容交涉的靜態裝載解決方案上進行裝載時,請考慮設定應用程式以擷取和解碼 Brotli 壓縮的檔案:
從 google/brotli
GitHub 存放庫取得 JavaScript Brotli 解碼器。 縮小的解碼器檔案會命名為 decode.min.js
,可於存放庫的 js
資料夾中找到。
備註
如果縮小的 decode.js
指令碼版本 (decode.min.js
) 失敗,請嘗試改用未縮小的版本 (decode.js
)。
更新應用程式以使用解碼器。
在 wwwroot/index.html
檔案中,將 autostart
的 false
標籤設置為 Blazor 以對應 <script>
:
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
在 Blazor 的 <script>
標籤後和結尾 </body>
標籤前,新增下列 JavaScript 程式碼 <script>
區塊。 下列函式會用 fetch
呼叫 cache: 'no-cache'
,以保持瀏覽器的快取更新。
Blazor Web App:
<script type="module">
import { BrotliDecode } from './decode.min.js';
Blazor.start({
webAssembly: {
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration' && type !== 'manifest') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
}
});
</script>
獨立 Blazor WebAssembly:
<script type="module">
import { BrotliDecode } from './decode.min.js';
Blazor.start({
loadBootResource: function (type, name, defaultUri, integrity) {
if (type !== 'dotnetjs' && location.hostname !== 'localhost' && type !== 'configuration') {
return (async function () {
const response = await fetch(defaultUri + '.br', { cache: 'no-cache' });
if (!response.ok) {
throw new Error(response.statusText);
}
const originalResponseBuffer = await response.arrayBuffer();
const originalResponseArray = new Int8Array(originalResponseBuffer);
const decompressedResponseArray = BrotliDecode(originalResponseArray);
const contentType = type ===
'dotnetwasm' ? 'application/wasm' : 'application/octet-stream';
return new Response(decompressedResponseArray,
{ headers: { 'content-type': contentType } });
})();
}
}
});
</script>
如需如何載入開機資源的詳細資訊,請參閱 ASP.NET Core Blazor 啟動。
若要停用壓縮,請將 CompressionEnabled
MSBuild 屬性新增至應用程式的專案檔,並將值設定為 false
:
<PropertyGroup>
<CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
您可以在命令殼層中使用下列語法將 CompressionEnabled
屬性傳遞至 dotnet publish
命令:
dotnet publish -p:CompressionEnabled=false
若要停用壓縮,請將 BlazorEnableCompression
MSBuild 屬性新增至應用程式的專案檔,並將值設定為 false
:
<PropertyGroup>
<BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>
您可以在命令殼層中使用下列語法將 BlazorEnableCompression
屬性傳遞至 dotnet publish
命令:
dotnet publish -p:BlazorEnableCompression=false
重寫 URL 以便正確地路由
在 Blazor WebAssembly 應用程式中的頁面元件路由要求不像 Blazor Server 應用程式中的路由要求那麼簡單。 請考慮具有兩個元件的 Blazor WebAssembly 應用程式:
-
Main.razor
:載入在應用程式的根目錄,並包含指向About
元件 (href="About"
) 的連結。 -
About.razor
:About
元件。
使用瀏覽器的網址列要求應用程式預設文件時 (例如 https://www.contoso.com/
):
- 瀏覽器提出要求。
- 傳回預設頁面,這通常是
index.html
。 -
index.html
啟動應用程式。 - 會載入 Router 元件並轉譯 Razor
Main
元件。
在主頁面中,選取 About
元件的連結在用戶端上會有作用,因為 Blazor 路由器會讓瀏覽器不再於網際網路上對 www.contoso.com
提出 About
的要求,並且會自行提供轉譯的 About
元件。 在Blazor WebAssembly 應用程式內的所有內部端點請求都以相同的方式運作:請求不會觸發瀏覽器對網路上伺服器資源的請求。 路由器會在內部處理要求。
如果使用瀏覽器之網址列提出對 www.contoso.com/About
的要求,則要求會失敗。 在應用程式的網際網路主機上沒有這類資源存在,因此會傳回「404 - 找不到」的回應。
因為瀏覽器會提出要求給以網際網路為基礎的主機以取得用戶端頁面,所以網頁伺服器和裝載服務必須針對實際上不在伺服器上的資源,將所有要求重新撰寫至 index.html
頁面。 傳回 index.html
時,應用程式的 Blazor 路由器會進行接管,並以正確的資源做出回應。
在部署至 IIS 伺服器時,您可以使用 URL Rewrite Module 搭配應用程式的已發行 web.config
檔案。 如需詳細資訊,請參閱使用 IIS 裝載和部署 ASP.NET CoreBlazor WebAssembly。
使用 ASP.NET Core 的託管部署
「託管部署」會將Blazor WebAssembly應用程式從在網頁伺服器上執行的ASP.NET Core 應用程式供瀏覽器使用。
用戶端 Blazor WebAssembly 應用程式會連同伺服器應用程式的任何其他靜態 Web 資產一起發行至伺服器應用程式的 /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot
資料夾。 兩個應用程式會一起部署。 需要有能夠裝載 ASP.NET Core 應用程式的網頁伺服器。 針對裝載部署,Visual Studio 包含已選取的 Blazor WebAssembly 選項(使用 命令時為 blazorwasm
),以及 dotnet new
專案範本(使用 Hosted
命令時為 -ho|--hosted
範本)。
如需詳細資訊,請參閱下列文章:
- ASP.NET Core 應用程式裝載和部署:裝載和部署 ASP.NET Core
- 部署至 Azure App Service:使用 Visual Studio 發佈 ASP.NET Core 應用程式至 Azure
- Blazor 專案範本:ASP.NET Core Blazor 專案結構
針對特定平台的架構相依可執行檔的託管部署
若要將裝載的 Blazor WebAssembly 應用程式部署為特定平台的架構相依可執行檔 (非獨立式),請根據使用中的工具使用下列指導。
Visual Studio
生成的發行設定檔中已配置自我包含的部署 ()。 請確認 Server 專案的發行設定檔包含設定為 <SelfContained>
的 false
MSBuild 屬性。
在 .pubxml
專案 Server 資料夾中的 Properties
發行設定檔內:
<SelfContained>false</SelfContained>
在 [發行] UI 的 [設定] 區域中,使用 [目標執行階段] 設定來設定 執行階段識別碼 (RID),這會在發行設定檔中產生 <RuntimeIdentifier>
MSBuild 屬性:
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
在上述組態中,{RID}
預留位置是執行階段識別碼 (RID)。
在 Server 專案中設定 發行 組態。
備註
您可以使用 .NET CLI 發行具有發行設定檔設定的應用程式,方法是將 /p:PublishProfile={PROFILE}
傳遞至 dotnet publish
命令,其中 {PROFILE}
預留位置是設定檔。 如需詳細資訊,請參閱適用於 ASP.NET Core 應用程式部署的 Visual Studio 發行設定檔 (.pubxml) 文章中的發行設定檔和資料夾發行範例兩個章節。 如果您在 dotnet publish
命令中 (而非在發行設定檔中) 傳遞 RID,請使用 MSBuild 屬性 (/p:RuntimeIdentifier
) 搭配命令,而不是搭配 -r|--runtime
選項。
.NET 命令列介面 (CLI)
在專案的專案檔中配置
<SelfContained>false</SelfContained>
這很重要
SelfContained
屬性必須放在 Server 專案的專案檔中。 使用
使用下列任一方法來設定執行階段識別碼 (RID):
選項 1:在
<PropertyGroup>
專案的專案檔中,於 Server 設定 RID:<RuntimeIdentifier>{RID}</RuntimeIdentifier>
在上述組態中,
{RID}
預留位置是執行階段識別碼 (RID)。從 Server 專案的發行 (Release) 組態中發行應用程式:
dotnet publish -c Release
選項 2:在
dotnet publish
命令中以 MSBuild 屬性 (/p:RuntimeIdentifier
) 的形式傳遞 RID,而不是使用-r|--runtime
選項來傳遞:dotnet publish -c Release /p:RuntimeIdentifier={RID}
在上述命令中,
{RID}
預留位置是執行階段識別碼 (RID)。
如需詳細資訊,請參閱下列文章:
獨立部署
「獨立部署」會將應用程式以一組靜態檔案的形式提供,這些檔案可直接由用戶端要求。 所有靜態檔案伺服器都能提供 Blazor 應用程式。
獨立部署資產會發佈至 /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot
或 bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish
資料夾,其中 {TARGET FRAMEWORK}
佔位元是目標架構。
Azure App Service
Blazor WebAssembly 應用程式可以部署到 Windows 平台上的 Azure App Services,並在 IIS 上提供應用程式的託管。
目前不支援將獨立 Blazor WebAssembly 應用程式部署至適用於 Linux 的 Azure App Service。 我們建議使用 Blazor WebAssembly 來裝載獨立的 應用程式,因為它支援這個情境。
使用 Docker 的獨立運行
獨立的 Blazor WebAssembly 應用程式會以一組靜態檔案的形式發行,以便由靜態檔案伺服器裝載。
若要在 Docker 中裝載應用程式:
- 選擇具有 Web 伺服器支援的 Docker 容器,例如 Nginx 或 Apache。
- 將
publish
資料夾資產複製到網頁伺服器中所定義、用於提供靜態檔案的位置資料夾。 - 視需要套用其他組態以提供 Blazor WebAssembly 應用程式。
如需組態方面的指導,請參閱下列資源:
主機組態值
在開發環境中,Blazor WebAssembly 應用程式可以在執行階段接受以下列主機組態值作為命令列引數。
內容根目錄
--contentroot
引數會設定包含應用程式內容檔案的目錄絕對路徑 (內容根目錄)。 在下列範例中,/content-root-path
是應用程式的內容根路徑。
在命令提示字元中,在本機環境執行應用程式時傳遞引數。 從應用程式目錄,執行:
dotnet watch --contentroot=/content-root-path
在應用程式的
launchSettings.json
設定檔中,將一個項目新增到 檔案。 當搭配 Visual Studio 偵錯工具並以dotnet watch
(或dotnet run
) 從命令提示字元執行應用程式時,會使用此設定。"commandLineArgs": "--contentroot=/content-root-path"
在 Visual Studio 中,在 [屬性]>[偵錯]>[應用程式引數] 中指定引數。 在 Visual Studio 屬性頁中設定引數,會將引數新增至
launchSettings.json
檔案。--contentroot=/content-root-path
路徑基礎
--pathbase
引數會以非根相對 URL 路徑,為本機執行的應用程式設定應用程式基底路徑 (<base>
標籤 href
會設為非 /
的路徑以供預備和生產之用)。 在下列範例中,/relative-URL-path
是應用程式的路徑基底。 如需詳細資訊,請參閱 ASP.NET Core Blazor 應用程式基底路徑。
這很重要
不同於提供給 href
標籤 <base>
的路徑,在傳遞 /
引數值時請勿包含尾端的斜線 (--pathbase
)。 如果應用程式基底路徑提供於 <base>
標籤作為 <base href="/CoolApp/">
(包括尾端的斜線),請將命令列引數值傳遞為 --pathbase=/CoolApp
(不含尾端的斜線)。
在命令提示字元中,在本機環境執行應用程式時傳遞引數。 從應用程式目錄,執行:
dotnet watch --pathbase=/relative-URL-path
在應用程式的
launchSettings.json
設定檔中,將一個項目新增到 檔案。 當搭配 Visual Studio 偵錯工具並以dotnet watch
(或dotnet run
) 從命令提示字元執行應用程式時,會使用此設定。"commandLineArgs": "--pathbase=/relative-URL-path"
在 Visual Studio 中,在 [屬性]>[偵錯]>[應用程式引數] 中指定引數。 在 Visual Studio 屬性頁中設定引數,會將引數新增至
launchSettings.json
檔案。--pathbase=/relative-URL-path
如需詳細資訊,請參閱 ASP.NET Core Blazor 應用程式基底路徑。
URL
--urls
引數設定IP位址或主機位址,以及用於監聽請求的連接埠和通訊協定。
在命令提示字元中,在本機環境執行應用程式時傳遞引數。 從應用程式目錄,執行:
dotnet watch --urls=http://127.0.0.1:0
在應用程式的
launchSettings.json
設定檔中,將一個項目新增到 檔案。 當搭配 Visual Studio 偵錯工具並以dotnet watch
(或dotnet run
) 從命令提示字元執行應用程式時,會使用此設定。"commandLineArgs": "--urls=http://127.0.0.1:0"
在 Visual Studio 中,在 [屬性]>[偵錯]>[應用程式引數] 中指定引數。 在 Visual Studio 屬性頁中設定引數,會將引數新增至
launchSettings.json
檔案。--urls=http://127.0.0.1:0
設定修剪器
Blazor 會在每個發行組建上執行中繼語言 (IL) 修剪,以從輸出組件中移除不必要的 IL。 如需詳細資訊,請參閱設定 ASP.NET Core Blazor 的修剪器。
設定連結器
Blazor 會在每個發行組建上執行中繼語言 (IL) 連結,以從輸出組件中移除不必要的 IL。 如需詳細資訊,請參閱設定 ASP.NET Core Blazor 的連結器。
變更 DLL 檔案的副檔名
本節適用於 .NET 5 到 .NET 7。 在 .NET 8 或更新版本中,.NET 元件會使用 Webcil 檔案格式部署為 WebAssembly 檔案 (.wasm
)。
如果防火牆、防毒程式或網路安全性設備會封鎖應用程式動態連結程式庫 (DLL) 檔案 .dll
的傳輸,您可以遵循本節中的指導來變更應用程式已發行 DLL 檔案的副檔名。
變更應用程式 DLL 檔案的副檔名可能無法解決問題,因為許多安全性系統會掃描應用程式檔案的內容,而不只是檢查副檔名。
針對會封鎖 DLL 檔案下載和執行的環境,如需更健全的方法,請採用下列任一方法:
- 使用 .NET 8 或更新版本,它會使用
.wasm
檔案格式將 .NET 元件封裝為 WebAssembly 檔案 ()。 如需詳細資訊,請參閱本文的 .NET 8 或更新版本中 的 .NET 元件的Webcil 封裝格式 一節。 - 在 .NET 6 或更新版本中,使用 自定義部署配置。
協力廠商也有可處理此問題的方法。 如需詳細資訊,請參閱 Awesome Blazor 上的資源。
在發行應用程式後,請使用 Shell 腳本或 DevOps 建置管道更改 .dll
檔案的名稱,以便在應用程式已發行輸出的目錄中使用不同的副檔名。
在下列範例中:
- 會使用 PowerShell (PS) 來更新副檔名。
- 會從命令列重新命名
.dll
檔案,以使用.bin
副檔名。 - 已發行 Blazor 開機資訊清單中具有
.dll
副檔名的檔案會更新為.bin
副檔名。 - 如果服務工作者資產也正在使用中,PowerShell 命令會將
.dll
檔案中列出的service-worker-assets.js
檔案更新為.bin
副檔名。
若要使用與 .bin
不同的副檔名,請使用所需的副檔名取代下列命令中的 .bin
。
在下列命令中,{PATH}
佔位符代表 _framework
資料夾中已發佈的 publish
資料夾的路徑。
重新命名資料夾中的副檔名稱:
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
將 blazor.boot.json
檔案的副檔名重新命名。
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
如果因為應用程式是漸進式Web應用程式(PWA),服務工作者資產也在使用中:
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
在上述命令中,{PATH}
預留位置是已發行 service-worker-assets.js
檔案的路徑。
若要解決壓縮 blazor.boot.json
檔案,請採用下列其中一種方法:
- 重新壓縮更新
blazor.boot.json
的檔案,併產生新的blazor.boot.json.gz
和blazor.boot.json.br
檔案。 (建議) - 移除壓縮的
blazor.boot.json.gz
和blazor.boot.json.br
檔案。 (此方法將停用壓縮。)
對於 漸進式 Web 應用程式 (PWA) 的壓縮 service-worker-assets.js
檔,請採用下列其中一種方法:
- 重新壓縮更新
service-worker-assets.js
的檔案,併產生新的service-worker-assets.js.br
和service-worker-assets.js.gz
檔案。 (建議) - 移除壓縮的
service-worker-assets.js.gz
和service-worker-assets.js.br
檔案。 (此方法將停用壓縮。)
若要在 .NET 6/7 中自動執行 Windows 上的延伸模塊變更,下列方法會使用放在專案根目錄的 PowerShell 腳本。 如果您想要在應用程式是blazor.boot.json
的情況下,重新壓縮service-worker-assets.js
檔案和檔案,下列腳本會停用壓縮,這是進一步修改的基礎。 資料夾的路徑publish
會在執行時傳遞至腳本。
ChangeDLLExtensions.ps1:
:
param([string]$filepath)
dir $filepath\wwwroot\_framework | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
((Get-Content $filepath\wwwroot\_framework\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\_framework\blazor.boot.json
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.gz
Remove-Item $filepath\wwwroot\_framework\blazor.boot.json.br
如果 Service Worker 資產也正在使用中,因為應用程式是漸進式 Web 應用程式(PWA),請新增下列命令:
((Get-Content $filepath\wwwroot\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content $filepath\wwwroot\service-worker-assets.js
Remove-Item $filepath\wwwroot\service-worker-assets.js.gz
Remove-Item $filepath\wwwroot\service-worker-assets.js.br
在專案檔中,指令碼會在發行 Release
組態的應用程式後執行:
<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
<Exec Command="powershell.exe -command "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</Target>
發佈應用程式之後,請手動重新壓縮 blazor.boot.json
,如果使用 service-worker-assets.js
的話,重新啟用壓縮。
備註
在重新命名和延後載入相同組件時,請參閱 ASP.NET Core Blazor WebAssembly 中的延後載入組件中的指導。
應用程式的伺服器通常需要靜態資產組態,才能提供具有更新後副檔名的檔案。 針對由 IIS 裝載的應用程式,在自訂 <mimeMap>
檔案的靜態內容區段 <staticContent>
中,為新的檔案副檔名新增 MIME 對應項目 web.config
。 下列範例假設副檔名已從 .dll
變更為 .bin
:
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
如果有使用壓縮,請包含壓縮檔案的更新:
<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />
移除關於 .dll
副檔名的項目:
- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
如果使用壓縮
- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />
如需自訂web.config
檔案的詳細資訊,請參閱使用自訂web.config
部分。
先前的部署損壞
一般來說,在部署時:
- 只會取代已變更的檔案,這通常會導致部署速度加快。
- 不屬於新部署的現有檔案會就地保留,以供新部署使用。
在極少數情況下,一直留在先前部署中的檔案可能會損毀新的部署。 徹底刪除現有部署 (或在部署前刪除本機發行的應用程式) 可能會解決部署損毀的問題。 刪除現有部署一次往往就足以解決問題,DevOps 的建置和部署管線也是如此。
如果您判斷在使用 DevOps 建置和部署管線時,一律需要清除先前的部署,則可以暫時在建置管線中新增步驟以刪除每個新部署的先前部署,直到您針對損毀的確切原因進行疑難排解為止。