Bagikan melalui


Menghosting dan menyebarkan ASP.NET Core Blazor WebAssembly

Nota

Ini bukan versi terbaru dari artikel ini. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.

Peringatan

Versi ASP.NET Core ini tidak lagi didukung. Untuk informasi selengkapnya, lihat Kebijakan Dukungan .NET dan .NET Core. Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.

Penting

Informasi ini berkaitan dengan produk pra-rilis yang mungkin dimodifikasi secara substansial sebelum dirilis secara komersial. Microsoft tidak memberikan jaminan, tersurat maupun tersirat, sehubungan dengan informasi yang diberikan di sini.

Untuk rilis saat ini, lihat versi .NET 9 dari artikel ini.

Artikel ini menjelaskan cara menghosting dan menyebarkan aplikasi Blazor WebAssembly.

Dengan model hosting :

  • Aplikasi Blazor , dependensinya, dan runtime .NET diunduh ke browser secara paralel.
  • Aplikasi ini dijalankan langsung di utas antarmuka pengguna browser.

Artikel ini berkaitan dengan skenario penyebaran tempat Blazor aplikasi ditempatkan di server web atau layanan hosting statis, .NET tidak digunakan untuk melayani Blazor aplikasi. Strategi ini tercakup di bagian Penyebaran mandiri dan artikel lain dalam simpul ini untuk IIS, layanan Azure, Halaman Apache, Nginx, dan GitHub.

Strategi penyebaran berikut didukung:

  • Aplikasi Blazor ini dilayani oleh aplikasi ASP.NET Core. Strategi ini tercakup dalam bagian Penyebaran yang dihosting dengan ASP.NET Core .
  • Aplikasi Blazor ini ditempatkan di server atau layanan web hosting statis, di mana .NET tidak digunakan untuk melayani Blazor aplikasi. Strategi ini tercakup dalam bagian Penyebaran Mandiri, yang mencakup informasi tentang menghosting Blazor WebAssembly aplikasi sebagai sub-aplikasi IIS.
  • Aplikasi ASP.NET Core menghosting beberapa Blazor WebAssembly aplikasi. Untuk informasi selengkapnya, lihat Beberapa aplikasi ASP.NET Core Blazor WebAssembly yang dihosting.

Hosting subdomain dan sub-aplikasi IIS

Hosting subdomain tidak memerlukan konfigurasi khusus aplikasi. Anda tidak perlu mengonfigurasi jalur dasar aplikasi ( <base> tag di wwwroot/index.html) untuk menghosting aplikasi di subdomain.

Hosting sub-aplikasi IIS memang mengharuskan Anda untuk mengatur jalur basis aplikasi. Untuk informasi selengkapnya dan tautan silang untuk panduan lebih lanjut tentang hosting sub-aplikasi IIS, lihat Host dan sebarkan ASP.NET Core Blazor.

Kurangi ukuran heap maksimum untuk beberapa browser pada perangkat seluler

Saat membangun aplikasi Blazor yang berjalan di klien, yaitu proyek .Client dari aplikasi Blazor Web App atau aplikasi mandiri Blazor WebAssembly, dan menargetkan browser perangkat seluler, terutama Safari di iOS, mungkin diperlukan untuk mengurangi memori maksimum menggunakan properti MSBuild EmccMaximumHeapSize. Nilai defaultnya adalah 2.147.483.648 byte, yang mungkin terlalu besar dan mengakibatkan aplikasi mengalami crash jika aplikasi mencoba mengalokasikan lebih banyak memori dengan browser gagal memberikannya. Contoh berikut menetapkan nilai menjadi 268.435.456 byte dalam Program file:

Saat membuat aplikasi Blazor WebAssembly yang menargetkan browser perangkat seluler, terutama Safari di iOS, mungkin diperlukan untuk mengurangi jumlah memori maksimum dengan menggunakan properti EmccMaximumHeapSize MSBuild. Nilai defaultnya adalah 2.147.483.648 byte, yang mungkin terlalu besar dan mengakibatkan aplikasi mengalami crash jika aplikasi mencoba mengalokasikan lebih banyak memori dengan browser gagal memberikannya. Contoh berikut menetapkan nilai menjadi 268.435.456 byte dalam Program file:

<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>

Untuk informasi selengkapnya tentang properti dan target MSBuild Mono/WebAssembly, lihat WasmApp.Common.targets (dotnet/runtime repositori GitHub).

Format kemasan webcil untuk perakitan .NET

Webcil adalah format pengemasan yang ramah web untuk rakitan .NET yang dirancang untuk mengaktifkan penggunaan Blazor WebAssembly di lingkungan jaringan terbatas. File webcil menggunakan pembungkus WebAssembly standar, di mana rakitan disebarkan sebagai file WebAssembly yang menggunakan ekstensi file standar .wasm .

Webcil adalah format kemasan bawaan ketika Anda menerbitkan Blazor WebAssembly aplikasi. Untuk menonaktifkan penggunaan Webcil, atur properti MSBuild berikut dalam file proyek aplikasi:

<PropertyGroup>
  <WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>

Menyesuaikan cara sumber daya boot dimuat

Sesuaikan cara sumber daya boot dimuat menggunakan loadBootResource API. Untuk informasi selengkapnya, lihat ASP.NET Core Blazor startup.

Kompresi

Blazor WebAssembly Saat aplikasi diterbitkan, output dikompresi secara statis selama penerbitan untuk mengurangi ukuran aplikasi dan menghapus overhead untuk kompresi runtime. Algoritma kompresi berikut digunakan:

Blazor bergantung pada host untuk melayani file terkompresi yang sesuai. Saat menghosting Blazor WebAssembly aplikasi mandiri, pekerjaan tambahan mungkin diperlukan untuk memastikan bahwa file yang dikompresi secara statis disajikan:

Blazor bergantung pada host untuk melayani file terkompresi yang sesuai. Saat menggunakan proyek ASP.NET Core HostedBlazor WebAssembly , proyek host mampu melakukan negosiasi konten dan melayani file yang dikompresi secara statis. Saat menghosting Blazor WebAssembly aplikasi mandiri, pekerjaan tambahan mungkin diperlukan untuk memastikan bahwa file yang dikompresi secara statis disajikan:

  • Untuk konfigurasi kompresi IIS web.config , lihat bagian kompresi IIS: Brotli dan Gzip.
  • Saat menghosting solusi hosting statis yang tidak mendukung negosiasi konten file yang dikompresi secara statis, pertimbangkan untuk mengonfigurasi aplikasi untuk mengambil dan mendekode file terkompresi Brotli:

Dapatkan dekoder JavaScript Brotli dari google/brotli repositori GitHub. File dekoder yang diperkecil diberi nama decode.min.js dan ditemukan di folder js dalam repositori.

Nota

Jika versi skrip yang dikurangi decode.js (decode.min.js) gagal, coba gunakan versi yang tidak dikurangi (decode.js) sebagai gantinya.

Perbarui aplikasi untuk menggunakan dekoder.

Dalam file wwwroot/index.html, atur autostart ke false pada tag Blazor<script>.

<script src="_framework/blazor.webassembly.js" autostart="false"></script>

Setelah tag Blazor milik <script> dan sebelum tag penutup </body>, tambahkan blok kode JavaScript berikut ini <script>. Fungsi berikut memanggil fetch dengan cache: 'no-cache' untuk menjaga cache browser tetap diperbarui.

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>

Mandiri 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>

Untuk informasi selengkapnya tentang memuat sumber daya boot, lihat ASP.NET Core Blazor startup.

Untuk menonaktifkan pemadatan, tambahkan CompressionEnabled properti MSBuild ke file proyek aplikasi dan atur nilainya ke false:

<PropertyGroup>
  <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>

Properti CompressionEnabled dapat diteruskan ke dotnet publish perintah dengan sintaks berikut dalam shell perintah:

dotnet publish -p:CompressionEnabled=false

Untuk menonaktifkan pemadatan, tambahkan BlazorEnableCompression properti MSBuild ke file proyek aplikasi dan atur nilainya ke false:

<PropertyGroup>
  <BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>

Properti BlazorEnableCompression dapat diteruskan ke dotnet publish perintah dengan sintaks berikut dalam shell perintah:

dotnet publish -p:BlazorEnableCompression=false

Mengubah URL untuk pengarahan yang tepat

Permintaan perutean untuk komponen halaman dalam aplikasi Blazor WebAssembly tidak sesederhana permintaan perutean di aplikasi Blazor Server. Pertimbangkan aplikasi Blazor WebAssembly dengan dua komponen:

  • Main.razor: Memuat di akar aplikasi dan berisi tautan ke komponen About (href="About").
  • About.razor: komponen About.

Saat dokumen default aplikasi diminta menggunakan bilah alamat browser (misalnya, https://www.contoso.com/):

  1. Browser membuat permintaan.
  2. Halaman default dikembalikan, yang biasanya index.html.
  3. index.html mem-bootstrapi aplikasi.
  4. Komponen Router dimuat, dan komponen RazorMain dirender.

Di Halaman Utama, memilih tautan ke komponen About berfungsi di klien karena router Blazor menghentikan browser melakukan permintaan di Internet ke www.contoso.com untuk About dan melayani komponen About yang telah dirender itu sendiri. Semua permintaan untuk endpoint internal dalam aplikasi Blazor WebAssembly berfungsi dengan cara yang sama: Permintaan tidak memicu permintaan berbasis browser ke sumber daya yang di-host oleh server di Internet. Router menangani permintaan secara internal.

Jika permintaan dibuat menggunakan bilah alamat browser untuk www.contoso.com/About, permintaan gagal. Tidak ada sumber daya seperti itu di host Internet aplikasi, sehingga respons 404 - Tidak Ditemukan dikembalikan.

Karena browser membuat permintaan ke host berbasis Internet untuk halaman sisi klien, server web dan layanan hosting harus menulis ulang semua permintaan untuk sumber daya yang tidak secara fisik di server ke index.html halaman. Ketika index.html dikembalikan, router aplikasi Blazor mengambil kendali dan merespons dengan sumber daya yang sesuai.

Saat menyebarkan ke server IIS, Anda dapat menggunakan modul URL Rewrite dengan file web.config aplikasi yang telah diterbitkan. Untuk informasi selengkapnya, lihat Menghosting dan menyebarkan ASP.NET Core Blazor WebAssembly dengan IIS.

Penyebaran yang dihosting dengan ASP.NET Core

Penyebaran yang dihosting menyajikan aplikasi ke browser dari Blazor WebAssembly yang berjalan di server web.

Aplikasi klien Blazor WebAssembly diterbitkan ke /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot dalam folder aplikasi server, bersama dengan aset web statis lainnya dari aplikasi server. Dua aplikasi disebarkan bersama-sama. Server web yang mampu menghosting aplikasi ASP.NET Core diperlukan. Untuk penyebaran yang dihosting, Visual Studio menyertakan templat proyek aplikasi (Blazor WebAssembly templat ketika menggunakan perintah ) dengan opsi blazorwasm dipilih (dotnet new ketika menggunakan perintah Hosted).

Untuk informasi lebih lanjut, baca artikel berikut:

Penyebaran yang dihosting dari executable yang bergantung pada kerangka kerja untuk platform tertentu

Untuk menyebarkan aplikasi yang dihosting Blazor WebAssembly sebagai executable yang bergantung pada kerangka kerja untuk platform tertentu (tidak mandiri) gunakan panduan berikut berdasarkan alat yang digunakan.

Visual Studio

Penyebaran mandiri dikonfigurasi untuk profil penerbitan yang dihasilkan (.pubxml). Konfirmasikan bahwa profil penerbitan Server proyek berisi <SelfContained> properti MSBuild yang diatur ke false.

Dalam file profil publikasi .pubxml di folder proyek ServerProperties:

<SelfContained>false</SelfContained>

Atur Pengidentifikasi Runtime (RID) menggunakan pengaturan Runtime Target di area Pengaturan dalam UI Terbitkan, yang menghasilkan <RuntimeIdentifier> properti MSBuild di profil penerbitan.

<RuntimeIdentifier>{RID}</RuntimeIdentifier>

Dalam konfigurasi sebelumnya, placeholder {RID} adalah Runtime Identifier (RID).

Terbitkan Server proyek dalam konfigurasi Rilis .

Nota

Dimungkinkan untuk menerbitkan aplikasi dengan pengaturan profil penerbitan menggunakan .NET CLI dengan melewatkan /p:PublishProfile={PROFILE} ke dalam perintah dotnet publish, di mana {PROFILE} adalah tempat penampung untuk profil. Untuk informasi selengkapnya, lihat bagian Profil penerbitan dan penerbitan folder Contoh di artikel Profil penerbitan Visual Studio (.pubxml) untuk penyebaran aplikasi ASP.NET Core. Jika Anda meneruskan RID dalam dotnet publish perintah dan bukan di profil publikasi, gunakan properti MSBuild (/p:RuntimeIdentifier) dengan perintah, bukan dengan opsi -r|--runtime.

.NET CLI

Konfigurasikan penyebaran mandiri dengan menempatkan properti MSBuild dalam file proyek <SelfContained> yang diatur ke <PropertyGroup>Server:

<SelfContained>false</SelfContained>

Penting

Properti SelfContained harus ditempatkan di file proyek Server. Properti tidak dapat diatur dengan benar dengan dotnet publish perintah menggunakan opsi --no-self-contained atau properti MSBuild /p:SelfContained=false.

Atur Pengidentifikasi Runtime (RID) menggunakan salah satu pendekatan berikut:

  • Opsi 1: Atur RID dalam <PropertyGroup> pada Server file proyek.

    <RuntimeIdentifier>{RID}</RuntimeIdentifier>
    

    Dalam konfigurasi sebelumnya, placeholder {RID} adalah Runtime Identifier (RID).

    Terbitkan aplikasi dalam konfigurasi Rilis dari Server proyek:

    dotnet publish -c Release
    
  • Opsi 2: Masukkan RID dalam perintah dotnet publish sebagai properti MSBuild (/p:RuntimeIdentifier), bukan dengan opsi -r|--runtime.

    dotnet publish -c Release /p:RuntimeIdentifier={RID}
    

    Dalam perintah sebelumnya, {RID} placeholder adalah Pengidentifikasi Runtime (RID).

Untuk informasi lebih lanjut, baca artikel berikut:

Penyebaran mandiri

Penerapan mandiri menyediakan aplikasi sebagai sekumpulan file statis yang diminta langsung oleh klien. Server file statis apa pun dapat melayani Blazor aplikasi.

Aset penyebaran mandiri diterbitkan ke dalam folder /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot atau bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish, di mana {TARGET FRAMEWORK} adalah tempat penampung kerangka kerja target.

Azure App Service

Blazor WebAssembly aplikasi dapat disebarkan ke Azure App Services di Windows, yang menghosting aplikasi di IIS.

Menyebarkan aplikasi mandiri Blazor WebAssembly ke Azure App Service untuk Linux saat ini tidak didukung. Sebaiknya hosting aplikasi mandiri Blazor WebAssembly menggunakan Azure Static Web Apps, yang mendukung skenario ini.

Mandiri dengan Docker

Aplikasi mandiri Blazor WebAssembly diterbitkan sebagai sekumpulan file statis untuk dihosting oleh server file statis.

Untuk menghosting aplikasi di Docker:

  • Pilih kontainer Docker dengan dukungan server web, seperti Nginx atau Apache.
  • publish Salin aset folder ke folder lokasi yang ditentukan di server web untuk melayani file statis.
  • Terapkan konfigurasi tambahan sesuai kebutuhan untuk melayani Blazor WebAssembly aplikasi.

Untuk panduan konfigurasi, lihat sumber daya berikut:

Nilai konfigurasi host

Blazor WebAssembly aplikasi dapat menerima nilai konfigurasi host berikut sebagai argumen baris perintah saat runtime di lingkungan pengembangan.

Sumber konten

Argumen --contentroot mengatur jalur absolut ke direktori yang berisi file konten aplikasi (akar konten). Dalam contoh berikut, /content-root-path adalah jalur akar konten aplikasi.

  • Teruskan argumen saat menjalankan aplikasi secara lokal pada baris perintah. Dari direktori aplikasi, jalankan:

    dotnet watch --contentroot=/content-root-path
    
  • Tambahkan entri ke file aplikasi launchSettings.json di profil IIS Express . Pengaturan ini digunakan ketika aplikasi dijalankan dengan Visual Studio Debugger dan dari prompt perintah menggunakan dotnet watch (atau dotnet run).

    "commandLineArgs": "--contentroot=/content-root-path"
    
  • Di Visual Studio, tentukan argumen dalam Properties>Debug>argumen Aplikasi. Mengatur argumen di halaman properti Visual Studio menambahkan argumen ke launchSettings.json file.

    --contentroot=/content-root-path
    

Dasar jalur

Argumen --pathbase mengatur jalur dasar aplikasi untuk aplikasi yang dijalankan secara lokal dengan jalur URL relatif non-root ( <base> tag href diatur ke jalur selain / untuk penahapan dan produksi). Dalam contoh berikut, /relative-URL-path adalah basis jalur aplikasi. Untuk informasi selengkapnya, lihat jalur dasar aplikasi ASP.NET CoreBlazor.

Penting

Tidak seperti jalur yang disediakan untuk href dari tag <base>, jangan sertakan garis miring berikutnya (/) saat meneruskan nilai argumen --pathbase. Jika jalur dasar aplikasi disediakan dalam <base> tag sebagai <base href="/CoolApp/"> (menyertakan garis miring berikutnya), berikan nilai argumen baris perintah sebagai --pathbase=/CoolApp (tidak ada garis miring berikutnya).

  • Teruskan argumen saat menjalankan aplikasi secara lokal pada baris perintah. Dari direktori aplikasi, jalankan:

    dotnet watch --pathbase=/relative-URL-path
    
  • Tambahkan entri ke file aplikasi launchSettings.json di profil IIS Express . Pengaturan ini digunakan saat menjalankan aplikasi dengan Visual Studio Debugger dan dari prompt perintah dengan dotnet watch (atau dotnet run).

    "commandLineArgs": "--pathbase=/relative-URL-path"
    
  • Di Visual Studio, tentukan argumen dalam Properties>Debug>argumen Aplikasi. Mengatur argumen di halaman properti Visual Studio menambahkan argumen ke launchSettings.json file.

    --pathbase=/relative-URL-path
    

Untuk informasi selengkapnya, lihat jalur dasar aplikasi ASP.NET CoreBlazor.

URL

Argumen --urls mengatur alamat IP atau alamat host dengan port dan protokol untuk mendengarkan permintaan.

  • Teruskan argumen saat menjalankan aplikasi secara lokal pada baris perintah. Dari direktori aplikasi, jalankan:

    dotnet watch --urls=http://127.0.0.1:0
    
  • Tambahkan entri ke file aplikasi launchSettings.json di profil IIS Express . Pengaturan ini digunakan saat menjalankan aplikasi dengan Visual Studio Debugger dan dari prompt perintah dengan dotnet watch (atau dotnet run).

    "commandLineArgs": "--urls=http://127.0.0.1:0"
    
  • Di Visual Studio, tentukan argumen dalam Properties>Debug>argumen Aplikasi. Mengatur argumen di halaman properti Visual Studio menambahkan argumen ke launchSettings.json file.

    --urls=http://127.0.0.1:0
    

Mengonfigurasi Pemangkas

Blazor melakukan pemangkasan Bahasa Perantara (IL) pada setiap build Rilis untuk menghapus IL yang tidak perlu dari rakitan output. Untuk informasi selengkapnya, lihat Mengonfigurasi Pemangkas untuk ASP.NET Core Blazor.

Mengonfigurasi Penghubung

Blazor melakukan penautan Bahasa Perantara (IL) pada setiap build Rilis untuk menghapus IL yang tidak perlu dari rakitan output. Untuk informasi selengkapnya, lihat Mengonfigurasi Linker untuk ASP.NET Core Blazor.

Mengubah ekstensi nama file file DLL

Bagian ini berlaku untuk .NET 5 hingga .NET 7. Di .NET 8 atau yang lebih baru, rakitan .NET disebarkan sebagai file WebAssembly (.wasm) menggunakan format file Webcil.

Jika firewall, program anti-virus, atau appliance keamanan jaringan memblokir transmisi file pustaka tautan dinamis (DLL) aplikasi (.dll), Anda dapat mengikuti panduan di bagian ini untuk mengubah ekstensi nama file dari file DLL yang diterbitkan aplikasi.

Mengubah ekstensi nama file file DLL aplikasi mungkin tidak menyelesaikan masalah karena banyak sistem keamanan memindai konten file aplikasi, bukan hanya memeriksa ekstensi file.

Untuk pendekatan yang lebih kuat di lingkungan yang memblokir pengunduhan dan eksekusi file DLL, lakukan salah satu pendekatan berikut:

  • Gunakan .NET 8 atau yang lebih baru, yang mengemas rakitan .NET sebagai file WebAssembly (.wasm) menggunakan format file Webcil . Untuk informasi selengkapnya, lihat bagian Format pengemasan Webcil untuk rakitan .NET di .NET 8 atau versi yang lebih baru dari artikel ini.
  • Di .NET 6 atau yang lebih baru, gunakan tata letak penyebaran kustom.

Pendekatan pihak ketiga ada untuk menangani masalah ini. Untuk informasi selengkapnya, lihat sumber daya di Awesome Blazor.

Setelah menerbitkan aplikasi, gunakan skrip shell atau alur build DevOps untuk mengganti nama .dll file untuk menggunakan ekstensi file yang berbeda di direktori output aplikasi yang diterbitkan.

Dalam contoh berikut:

  • PowerShell (PS) digunakan untuk memperbarui ekstensi file.
  • .dll file diganti namanya untuk menggunakan .bin ekstensi file dari baris perintah.
  • File yang tercantum dalam manifes boot yang diterbitkan dengan ekstensi file Blazor, diperbarui menjadi ekstensi file .dll.
  • Jika aset pekerja layanan juga digunakan, perintah PowerShell memperbarui file yang tercantum dalam file .dll ke ekstensi file service-worker-assets.js.

Untuk menggunakan ekstensi file yang berbeda dari .bin, ganti .bin dalam perintah berikut dengan ekstensi file yang diinginkan.

Dalam perintah berikut, {PATH} adalah placeholder untuk jalur menuju direktori yang diterbitkan _framework di dalam direktori publish.

Ganti nama ekstensi file di folder:

dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }

Ganti nama ekstensi file dalam blazor.boot.json file:

((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json

Jika aset pekerja layanan juga digunakan karena aplikasi ini adalah Aplikasi Web Progresif (PWA):

((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js

Dalam perintah sebelumnya, {PATH} adalah tempat penampung untuk jalur ke file service-worker-assets.js yang diterbitkan.

Untuk mengatasi file terkompresi blazor.boot.json , adopsi salah satu pendekatan berikut:

  • Rekompresi file blazor.boot.json yang diperbarui, menghasilkan file blazor.boot.json.gz dan blazor.boot.json.br baru. (Disarankan)
  • Hapus file blazor.boot.json.gz dan blazor.boot.json.br yang terkompresi. (Pemadatan dinonaktifkan dengan pendekatan ini.)

Untuk file terkompresi service-worker-assets.js gunakan salah satu pendekatan berikut:

  • Rekompresi file service-worker-assets.js yang diperbarui, menghasilkan file service-worker-assets.js.br dan service-worker-assets.js.gz baru. (Disarankan)
  • Hapus file service-worker-assets.js.gz dan service-worker-assets.js.br yang terkompresi. (Pemadatan dinonaktifkan dengan pendekatan ini.)

Untuk mengotomatiskan perubahan ekstensi pada Windows di .NET 6/7, pendekatan berikut menggunakan skrip PowerShell yang ditempatkan di akar proyek. Skrip berikut, yang menonaktifkan kompresi, adalah dasar untuk modifikasi lebih lanjut jika Anda ingin mengkompresi ulang file blazor.boot.json dan file service-worker-assets.js jika aplikasi merupakan Progressive Web App (PWA). Jalur ke publish folder diteruskan ke skrip saat dijalankan.

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

Jika aset pekerja layanan juga digunakan karena aplikasi adalah Progressive Web App (PWA), tambahkan perintah berikut:

((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

Dalam file proyek, setelah aplikasi diterbitkan untuk konfigurasi Release, skrip dijalankan.

<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
  <Exec Command="powershell.exe -command &quot;&amp; {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}&quot;" />
</Target>

Setelah menerbitkan aplikasi, rekompres ulang blazor.boot.json secara manual, dan service-worker-assets.js jika digunakan, untuk mengaktifkan kembali kompresi.

Nota

Saat mengganti nama dan melakukan lazy load pada rakitan yang sama, lihat panduan dalam Lazy load assemblies di ASP.NET Core Blazor WebAssembly.

Biasanya, server aplikasi memerlukan konfigurasi aset statis untuk melayani file dengan ekstensi yang diperbarui. Untuk aplikasi yang dihosting oleh IIS, tambahkan entri peta MIME (<mimeMap>) untuk ekstensi file baru di bagian konten statis (<staticContent>) dalam file kustom web.config . Contoh berikut mengasumsikan bahwa ekstensi file diubah dari .dll menjadi .bin:

<staticContent>
  ...
  <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
  ...
</staticContent>

Sertakan pembaruan untuk file terkompresi jika pemadatan sedang digunakan:

<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />

Hapus entri untuk .dll ekstensi file:

- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />

Hapus entri untuk file terkompresi .dll jika pemadatan sedang digunakan:

- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />

Untuk informasi selengkapnya tentang file kustom web.config , lihat bagian Penggunaan kustom web.config .

Kerusakan implementasi sebelumnya

Biasanya saat penerapan:

  • Hanya file yang telah berubah yang diganti, yang biasanya menghasilkan penyebaran yang lebih cepat.
  • File yang ada yang bukan bagian dari penyebaran baru dibiarkan untuk digunakan oleh penyebaran baru.

Dalam kasus yang jarang terjadi, file yang tertinggal dari penyebaran sebelumnya dapat merusak penyebaran baru. Menghapus sepenuhnya penyebaran yang ada (atau aplikasi yang diterbitkan secara lokal sebelum penyebaran) dapat menyelesaikan masalah dengan penyebaran yang rusak. Seringkali, menghapus penyebaran yang sudah ada cukup untuk menyelesaikan masalah, termasuk untuk build DevOps dan pipeline deploy.

Jika Anda menentukan bahwa menghapus penyebaran sebelumnya selalu diperlukan saat alur build dan deploy DevOps sedang digunakan, Anda dapat menambahkan langkah untuk sementara ke alur build untuk menghapus penyebaran sebelumnya untuk setiap penyebaran baru hingga Anda memecahkan masalah penyebab pasti kerusakan.