共用方式為


裝載及部署 ASP.NET Core Blazor WebAssembly

備註

這不是本文的最新版本。 如需目前的版本,請參閱 本文的 .NET 9 版本。

警告

不再支援此版本的 ASP.NET Core。 如需詳細資訊,請參閱 .NET 和 .NET Core 支持原則。 如需目前的版本,請參閱 本文的 .NET 9 版本。

這很重要

這項資訊與發行前版本產品有關,在正式發行前可能會大幅修改。 Microsoft 對於此處提供的資訊,不做任何明確或隱含的保證。

如需目前的版本,請參閱 本文的 .NET 9 版本。

本文說明如何裝載和部署 Blazor WebAssembly 應用程式。

使用 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 檔案中,將 autostartfalse 標籤設置為 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.razorAbout 元件。

使用瀏覽器的網址列要求應用程式預設文件時 (例如 https://www.contoso.com/):

  1. 瀏覽器提出要求。
  2. 傳回預設頁面,這通常是 index.html
  3. index.html 啟動應用程式。
  4. 會載入 Router 元件並轉譯 RazorMain 元件。

在主頁面中,選取 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 範本)。

如需詳細資訊,請參閱下列文章:

針對特定平台的架構相依可執行檔的託管部署

若要將裝載的 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)

在專案的專案檔中配置自包含部署,方法是將 MSBuild 屬性放入,並設置為

<SelfContained>false</SelfContained>

這很重要

SelfContained 屬性必須放在 Server 專案的專案檔中。 使用 指令和 選項或 MSBuild 屬性 ,無法正確設定此屬性。

使用下列任一方法來設定執行階段識別碼 (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/wwwrootbin/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.gzblazor.boot.json.br 檔案。 (建議)
  • 移除壓縮的 blazor.boot.json.gzblazor.boot.json.br 檔案。 (此方法將停用壓縮。

對於 漸進式 Web 應用程式 (PWA) 的壓縮 service-worker-assets.js 檔,請採用下列其中一種方法:

  • 重新壓縮更新 service-worker-assets.js 的檔案,併產生新的 service-worker-assets.js.brservice-worker-assets.js.gz 檔案。 (建議)
  • 移除壓縮的 service-worker-assets.js.gzservice-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 &quot;&amp; {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}&quot;" />
</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 建置和部署管線時,一律需要清除先前的部署,則可以暫時在建置管線中新增步驟以刪除每個新部署的先前部署,直到您針對損毀的確切原因進行疑難排解為止。