Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 komponenAbout
(href="About"
). -
About.razor
: komponenAbout
.
Saat dokumen default aplikasi diminta menggunakan bilah alamat browser (misalnya, https://www.contoso.com/
):
- Browser membuat permintaan.
- Halaman default dikembalikan, yang biasanya
index.html
. -
index.html
mem-bootstrapi aplikasi. - Komponen Router dimuat, dan komponen Razor
Main
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:
- Hosting dan penyebaran aplikasi ASP.NET Core: Host dan sebarkan aplikasi ASP.NET Core
- Penyebaran ke Azure App Service: Menerbitkan aplikasi ASP.NET Core ke Azure dengan Visual Studio
- Blazortemplat proyek: struktur proyek ASP.NET Core Blazor
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:
- Artikel Nginx atau Apache
- Dokumentasi Docker
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 menggunakandotnet watch
(ataudotnet 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 dengandotnet watch
(ataudotnet 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 dengandotnet watch
(ataudotnet 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 fileservice-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 fileblazor.boot.json.gz
danblazor.boot.json.br
baru. (Disarankan) - Hapus file
blazor.boot.json.gz
danblazor.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 fileservice-worker-assets.js.br
danservice-worker-assets.js.gz
baru. (Disarankan) - Hapus file
service-worker-assets.js.gz
danservice-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 "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</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.
ASP.NET Core