Blazor: обновленная логика проверки для статических веб-ресурсов
При проверке конфликтов для статических веб-ресурсов в ASP.NET Core 3.1 и Blazor WebAssembly 3.2 возникала ошибка. Эта ошибка:
- Не позволяла правильно обнаружить конфликты между ресурсами узла и ресурсами из библиотеки классов Razor (RCL) и приложениями Blazor WebAssembly.
- В основном влияет на приложения Blazor WebAssembly, поскольку статические веб-ресурсы в RCL обрабатываются по префиксу
_content/$(PackageId)
.
Представленные версии
5,0
Старое поведение
Во время разработки статические веб-ресурсы RCL могут быть автоматически переопределены с помощью ресурсов основного проекта по одному и тому же пути к узлу. Рассмотрим RCL, который определил статический веб-ресурс для обслуживания по адресу /folder/file.txt. Если узел поместил файл в папку wwwroot/Folder/File. txt, то файл на сервере автоматически был переопределен в RCL или приложении Blazor WebAssembly.
Новое поведение
ASP.NET Core правильно определяет, когда возникает эта проблема. Он информирует пользователя о конфликте, чтобы вы могли предпринять соответствующие действия.
Причина изменения
Статические веб-ресурсы не предназначены для переопределения файлами на узле wwwroot проекта. Если разрешить переопределение этих файлов, могут возникать ошибки, которые трудно диагностировать. В результате могут возникнуть неопределенные изменения поведения в опубликованных приложениях.
Рекомендуемое действие
По умолчанию причины для возникновения конфликтов файла RCL с файлом на узле отсутствуют. Файлы RCL имеют префикс _content/${PackageId}
. Файлы Blazor WebAssembly размещаются в корне пространства URL-адресов узла, что исключает конфликты. Например, приложения Blazor WebAssembly содержат файл favicon.ico, который узел может также включить в папку wwwroot.
Если источником конфликта является файл RCL, это часто означает, что код копирует ресурсы из библиотеки в папку wwwroot проекта. Написание кода для копирования файлов позволяет достичь основной цели статических веб-ресурсов. Эта цель заключается в получении обновлений в браузере при обновлении содержимого без активации новой компиляции.
Вы можете сохранить это поведение и хранить файл на узле. Для этого удалите файл из списка статических веб-ресурсов с настраиваемым целевым объектом MSBuild.
Чтобы использовать файл RCL или файл Blazor WebAssembly вместо файла основного проекта, удалите файл из основного проекта.
Затронутые API
Нет