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

Нет