Blazor: zaktualizowana logika sprawdzania poprawności statycznych zasobów internetowych

Wystąpił problem podczas walidacji konfliktów dla statycznych zasobów internetowych w ASP.NET Core 3.1 i Blazor WebAssembly 3.2. Problem:

  • Zapobiegano prawidłowemu wykrywaniu konfliktów między elementami zawartości hosta i elementami zawartości z bibliotek klas Razor (RCLs) i aplikacji Blazor WebAssembly.
  • Głównie wpływa na aplikacje zestawu WebAssembly platformy Blazor, ponieważ domyślnie statyczne zasoby internetowe w listach RCL są obsługiwane pod prefiksem _content/$(PackageId) .

Wprowadzona wersja

5,0

Stare zachowanie

Podczas programowania statyczne zasoby sieci Web listy RCL mogą być dyskretnie zastępowane za pomocą zasobów projektu hosta na tej samej ścieżce hosta. Rozważ listę RCL, która zdefiniowała statyczny element zawartości sieci Web, który ma być obsługiwany w folderze /folder/file.txt. Jeśli host umieścił plik w folderze wwwroot/folder/file.txt, plik na serwerze w trybie dyskretnym przerodzi plik na liście RCL lub aplikacji Blazor WebAssembly.

Nowe zachowanie

ASP.NET Core prawidłowo wykrywa, kiedy ten problem występuje. Informuje użytkownika o konflikcie, aby można było wykonać odpowiednie działania.

Przyczyna wprowadzenia zmiany

Statyczne zasoby internetowe nie miały być zastępowane przez pliki na hoście wwwroot projektu. Zezwolenie na zastąpienie tych plików może prowadzić do błędów, które są trudne do zdiagnozowania. Wynikiem mogą być niezdefiniowane zmiany zachowania w opublikowanych aplikacjach.

Domyślnie nie ma powodu, dla którego plik listy RCL może powodować konflikt z plikiem na hoście. Pliki listy RCL są poprzedzone prefiksem _content/${PackageId}. Pliki zestawu WebAssembly platformy Blazor są umieszczane w katalogu głównym obszaru adresu URL hosta, co ułatwia konflikty. Na przykład aplikacje zestawu WebAssembly platformy Blazor zawierają plik favicon.ico , który host może również zawierać w folderze wwwroot .

Jeśli źródłem konfliktu jest plik listy RCL, często oznacza to, że kod kopiuje zasoby z biblioteki do folderu wwwroot projektu. Pisanie kodu służącego do kopiowania plików stanowi podstawowy cel statycznych zasobów internetowych. Ten cel ma podstawowe znaczenie dla pobierania aktualizacji w przeglądarce po zaktualizowaniu zawartości bez konieczności wyzwalania nowej kompilacji.

Możesz zachować to zachowanie i zachować plik na hoście. Aby to zrobić, usuń plik z listy statycznych zasobów internetowych z niestandardowym obiektem docelowym MSBuild.

Aby użyć pliku listy RCL lub pliku aplikacji WebAssembly platformy Blazor zamiast pliku projektu hosta, usuń plik z projektu hosta.

Dotyczy interfejsów API

Brak