Blazor: Logika validasi yang diperbarui untuk aset web statik
Ada masalah dalam validasi konflik untuk aset web statis di ASP.NET Core 3.1 dan Blazor WebAssembly 3.2. Masalahnya:
- Mencegah deteksi konflik yang tepat antara aset host dan aset dari Razor Class Libraries (RCL) dan aplikasi Blazor WebAssembly.
- Sebagian besar mempengaruhi aplikasi Blazor WebAssembly, karena secara default, aset web statis di RCL disajikan di bawah
_content/$(PackageId)
awalan.
Versi yang diperkenalkan
5.0
Perilaku yang lama
Selama pengembangan, aset web statis RCL dapat ditimpa secara diam-diam dengan aset proyek host pada jalur host yang sama. Pertimbangkan RCL yang telah menentukan aset web statis untuk dilayani di /folder/file.txt. Jika host menempatkan file di wwwroot/folder/file.txt, file di server secara diam-diam menimpa file pada aplikasi RCL atau Blazor WebAssembly.
Perilaku yang baru
ASP.NET Core mendeteksi dengan benar kapan masalah ini terjadi. Ini memberi tahu Anda, pengguna, dari konflik sehingga Anda dapat mengambil tindakan yang sesuai.
Alasan untuk berubah
Aset web statis tidak dimaksudkan untuk dapat diambil alih oleh file pada host wwwroot proyek. Memungkinkan penimpaan file tersebut dapat menyebabkan kesalahan yang sulit didiagnosis. Hasilnya bisa berupa perubahan perilaku yang tidak ditentukan di aplikasi yang diterbitkan.
Tindakan yang direkomendasikan
Secara default, tidak ada alasan bagi file RCL untuk berkonflik dengan file pada host. File RCL diawali dengan _content/${PackageId}
. File Blazor WebAssembly ditempatkan di akar ruang URL host, yang membuat konflik lebih mudah. Misalnya, aplikasi Blazor WebAssembly berisi file favicon.ico yang mungkin juga disertakan host dalam folder wwwroot-nya.
Jika sumber konflik adalah file RCL, itu sering berarti kode menyalin aset dari pustaka ke folder wwwroot proyek. Menulis kode untuk menyalin file mengalahkan tujuan utama aset web statis. Tujuan ini sangat mendasar untuk mendapatkan pembaruan di browser ketika konten diperbarui tanpa harus memicu kompilasi baru.
Anda dapat memilih untuk mempertahankan perilaku ini dan mempertahankan file pada host. Untuk melakukannya, hapus file dari daftar aset web statis dengan target MSBuild kustom.
Untuk menggunakan file RCL atau file aplikasi Blazor WebAssembly alih-alih file proyek host, hapus file dari proyek host.
API yang Terpengaruh
Tidak ada