Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Note
Это не последняя версия этой статьи. Текущий выпуск можно найти в версии этой статьи о .NET 10.
Warning
Эта версия ASP.NET Core больше не поддерживается. Для получения дополнительной информации см. Политику поддержки .NET и .NET Core. Текущий выпуск можно найти в версии этой статьи о .NET 10.
В этой статье объясняется, как размещать и развертывать Blazor WebAssembly приложения.
При использовании модели хостинга Blazor WebAssembly:
- Приложение Blazor, его зависимости и среда выполнения .NET загружаются в браузер параллельно.
- Приложение выполняется непосредственно в потоке пользовательского интерфейса браузера.
Эта статья относится к сценарию развертывания, в котором приложение Blazor размещено на статическом веб-сервере или службе размещения, .NET не используется для обслуживания приложения Blazor. Эта стратегия рассматривается в разделе Standalone deployment и других статьях этого раздела для служб IIS, Azure, Apache, Nginx и GitHub Pages.
Поддерживаются следующие стратегии развертывания:
- Приложение Blazor обслуживается приложением ASP.NET Core. Эта стратегия рассматривается в разделе Hosted deployment with ASP.NET Core.
- Приложение Blazor помещается на статический веб-сервер или службу размещения, где .NET не используется для обслуживания приложения Blazor. Эта стратегия рассматривается в разделе Автономное развертывание, где приводятся сведения о размещении приложения Blazor WebAssembly в качестве дочернего приложения IIS.
- Приложение ASP.NET Core размещает несколько приложений Blazor WebAssembly. Дополнительные сведения см. в разделе несколько размещенных ASP.NET Core Blazor WebAssembly приложений.
Blazor WebAssembly Локальное обслуживание приложения для тестирования
Многие серверы с открытым исходным кодом и коммерческими HTTP-серверами могут обслуживать опубликованное Blazor WebAssembly приложение локально. Для простого HTTP-сервера командной строки рекомендуется использовать средство natemcmaster/dotnet-serve .NET.
Warning
Средство natemcmaster/dotnet-serve .NET не принадлежит Майкрософт и не распространяется ни на какое соглашение о поддержке или лицензию Майкрософт. Используйте осторожность при использовании стороннего средства, особенно для тестирования сценариев безопасности. Убедитесь, что средство соответствует официальным спецификациям и принимает рекомендации по обеспечению безопасности. Сохраните текущую версию средства, чтобы получить последние исправления ошибок.
Размещение поддомена и подприложения IIS
Для размещения поддомена не требуется специальная конфигурация приложения. Вам не нужно настраивать базовый путь приложения (тег <base> в wwwroot/index.html) для размещения приложения в поддомене.
Для размещения подприложений IIS действительно требуется установить базовый путь приложения. Дополнительные сведения и перекрестные ссылки на дополнительные рекомендации по размещению вложенных приложений IIS см. в разделе Host и развертывание ASP.NET Core Blazor.
Уменьшение максимального размера кучи для некоторых браузеров мобильных устройств
При создании Blazor приложения, работающего .Client на клиенте (Blazor Web App проекте или автономном Blazor WebAssembly приложении) и предназначенного для браузеров мобильных устройств, особенно Safari на iOS, может потребоваться снизить максимальный объём памяти приложения с помощью свойства EmccMaximumHeapSize MSBuild. Значение по умолчанию — 2 147 483 648 байт, которое может быть слишком большим и привести к сбою приложения, если оно попытается выделить больше памяти, а браузер откажется её предоставить. В следующем примере значение устанавливается на 268 435 456 байт в файле Program:
При создании приложения, предназначенного для браузеров мобильных устройств, особенно Safari на iOS, возможно, потребуется уменьшить максимальную память для приложения с использованием свойства MSBuild Blazor WebAssembly. Значение по умолчанию — 2 147 483 648 байт, которое может быть слишком большим и привести к сбою приложения, если оно попытается выделить больше памяти, а браузер откажется её предоставить. В следующем примере значение устанавливается на 268 435 456 байт в файле Program:
<EmccMaximumHeapSize>268435456</EmccMaximumHeapSize>
Дополнительные сведения о свойствах и целях MSBuild для
Формат упаковки Webcil для сборок .NET
Webcil — это удобный для интернета формат упаковки для сборок .NET, предназначенных для использования Blazor WebAssembly в ограничивающих сетевых средах. Файлы Webcil используют стандартную оболочку WebAssembly, где сборки развертываются как файлы WebAssembly, использующие стандартное .wasm расширение файла.
Webcil — это формат упаковки по умолчанию при публикации Blazor WebAssembly приложения. Чтобы отключить использование Webcil, задайте в файле проекта приложения следующее свойство MSBuild:
<PropertyGroup>
<WasmEnableWebcil>false</WasmEnableWebcil>
</PropertyGroup>
Настройка способа загрузки загрузочных ресурсов
Настройте способ загрузки загрузочных ресурсов с помощью API loadBootResource. Дополнительные сведения см. в разделе ASP.NET Core Blazor startup.
Compression
При публикации приложения Blazor WebAssembly выходные данные статически сжимаются, чтобы уменьшить размер приложения и исключить издержки на сжатие среды выполнения. Используются следующие алгоритмы сжатия:
Blazor полагается на хост для предоставления соответствующих сжатых файлов. При размещении автономного приложения Blazor WebAssembly, возможно, потребуется реализовать дополнительные действия для обслуживания статически сжатых файлов.
Blazor полагается на хост для предоставления соответствующих сжатых файлов. При использовании проекта ASP.NET Core HostedBlazor WebAssembly, главный проект может выполнять согласование содержимого и обслуживать статически сжатые файлы. При размещении автономного приложения Blazor WebAssembly, возможно, потребуется реализовать дополнительные действия для обслуживания статически сжатых файлов.
- Сведения о конфигурации сжатия IIS
web.configсм. в разделе IIS: сжатие Brotli и Gzip. - При размещении на статических сервисах хостинга, которые не поддерживают переговоры о содержимом для статически сжатых файлов, рассмотрите возможность настройки приложения для извлечения и декодирования сжатых файлов Brotli.
Получите декодатор JavaScript Brotli из репозитория google/brotli GitHub. Сокращенный файл декодера называется decode.min.js и находится в папке js репозитория.
Note
Если сокращенная версия скрипта decode.js (decode.min.js) не работает, попробуйте вместо нее использовать не сокращенную версию (decode.js).
обновите приложение для использования декодера.
В файле wwwroot/index.html установите для autostart значение false в теге Blazor элемента <script>:
<script src="_framework/blazor.webassembly.js" autostart="false"></script>
После тега Blazor<script> и перед закрывающим тегом </body> добавьте следующий блок JavaScript-кода <script>. Следующая функция вызывает fetch с cache: 'no-cache' для обновления кэша браузера.
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>
Самостоятельное 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>
Дополнительные сведения о загрузке загрузочных ресурсов см. в разделе ASP.NET Core Blazor startup.
Чтобы отключить сжатие, добавьте свойство CompressionEnabled MSBuild в файл проекта приложения и задайте для него значение false.
<PropertyGroup>
<CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>
Свойство CompressionEnabled можно передать в команду dotnet publish с помощью следующего синтаксиса в командной оболочке.
dotnet publish -p:CompressionEnabled=false
Чтобы отключить сжатие, добавьте свойство BlazorEnableCompression MSBuild в файл проекта приложения и задайте для него значение false.
<PropertyGroup>
<BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>
Свойство BlazorEnableCompression можно передать в команду dotnet publish с помощью следующего синтаксиса в командной оболочке.
dotnet publish -p:BlazorEnableCompression=false
Переписывание URL-адресов для правильной маршрутизации
Запросы маршрутизации для компонентов страниц в Blazor WebAssembly приложении не так просто, как запросы маршрутизации в Blazor Server приложении. Рассмотрим сценарий с приложением Blazor WebAssembly с двумя компонентами:
-
Main.razor: загружается в корне приложения и содержит ссылку наAboutкомпонент (href="About"). -
About.razor: компонентAbout.
При запросе документа приложения по умолчанию в адресной строке браузера (например, https://www.contoso.com/):
- Браузер отправляет запрос.
- Возвращается страница по умолчанию; обычно это
index.html. - Страница
index.htmlобеспечивает начальную загрузку приложения. -
Router компонент загружается, а Razor
Mainкомпонент отрисовывается.
На странице Main возможность выбора ссылки на компонент About доступна на клиентском компьютере, так как маршрутизатор Blazor не разрешает браузеру сделать запрос в Интернете к www.contoso.com для About и сам обрабатывает отображенный компонент About. Все запросы внутренних конечных точек в
Если запрос www.contoso.com/About сделан с помощью адресной строки браузера, он завершится ошибкой. Такой ресурс не существует на интернет-узле приложения, поэтому возвращается ответ 404 — Not Found (не найдено).
Поскольку браузеры выполняют запросы к интернет-узлам для клиентских страниц, веб-серверам и службам хостинга необходимо переписывать все запросы к ресурсам, которые физически отсутствуют на сервере, на страницу index.html. Когда возвращается index.html, маршрутизатор Blazor приложения принимает управление и отвечает нужным ресурсом.
При развертывании на сервере IIS можно использовать модуль переопределения URL-адресов с опубликованным файлом web.config приложения. Дополнительные сведения см. в статье Host и развертывание ASP.NET Core Blazor WebAssembly с помощью IIS.
Размещенное развертывание с ASP.NET Core
Развертывание hosted обеспечивает доставку приложения Blazor WebAssembly браузерам из приложения ASP.NET Core, работающего на веб-сервере.
Клиентское приложение Blazor WebAssembly будет опубликовано в папку /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot серверного приложения вместе со статическими веб-ресурсами серверного приложения. Оба приложения развертываются вместе. Требуется веб-сервер, способный размещать приложение ASP.NET Core. Для хостингового развертывания Visual Studio включает шаблон Blazor WebAssembly App для проекта (шаблон blazorwasm при использовании команды dotnet new) с выбранной опцией Hosted (-ho|--hosted при использовании команды dotnet new).
Дополнительные сведения см. в следующих статьях:
- ASP.NET Core хостинг и развертывание приложений: Хостинг и развертывание ASP.NET Core
- Развертывание в Служба приложений Azure: Публикация приложения ASP.NET Core в Azure с помощью Visual Studio
- Blazor шаблоны проектов: ASP.NET Core Blazor структура проекта
Размещенное развертывание исполняемого файла, зависящего от среды выполнения для определенной платформы
Чтобы развернуть размещенное приложение Blazor WebAssembly в качестве исполняемого файла, зависящего от среды выполнения для определенной платформы (не автономной), используйте следующие рекомендации на основе используемых инструментов.
Visual Studio
Автономное развёртывание настроено для сгенерированного профиля публикации.pubxml. Убедитесь, что профиль публикации проекта Server содержит свойство MSBuild <SelfContained>, которому присвоено значение false.
В файле профиля публикации .pubxml в папке Server проекта Properties выполните следующие действия:
<SelfContained>false</SelfContained>
Задайте Идентификатор среды выполнения (RID) с помощью параметра Целевая среда выполнения в области Параметры пользовательского интерфейса Публикация, который создает свойство MSBuild <RuntimeIdentifier> в профиле публикации:
<RuntimeIdentifier>{RID}</RuntimeIdentifier>
В предыдущей конфигурации заполнитель {RID} представляет собой Идентификатор среды выполнения (RID).
Опубликуйте проект Server в конфигурации Выпуск.
Note
Можно опубликовать приложение с параметрами профиля публикации с помощью интерфейса командной строки .NET, передав /p:PublishProfile={PROFILE} в команду dotnet publish, где плейсхолдер {PROFILE} является профилем. Дополнительные сведения см. в разделах Профили публикации и Пример публикации папки в статье Профили публикации Visual Studio (.pubxml) для развертывания приложений ASP.NET Core. Если вы передаете RID в команде dotnet publish, а не в профиле публикации, используйте свойство MSBuild (/p:RuntimeIdentifier) с командой, а не с -r|--runtime параметром.
интерфейс командной строки .NET
Настройте автономное развертывание, указав свойство MSBuild <SelfContained> в секции <PropertyGroup> файла проекта Server, установив его значение на false:
<SelfContained>false</SelfContained>
Important
Свойство SelfContained должно быть помещено в файл проекта Server. Свойство не может быть корректно задано с помощью команды dotnet publish при использовании параметра --no-self-contained или свойства MSBuild /p:SelfContained=false.
Задайте Идентификатор среды выполнения (RID), используя любой из указанных ниже подходов:
Вариант 1. Задайте RID в разделе
<PropertyGroup>в файле проекта Server:<RuntimeIdentifier>{RID}</RuntimeIdentifier>В предыдущей конфигурации заполнитель
{RID}представляет собой Идентификатор среды выполнения (RID).Опубликуйте приложение в конфигурации Release из проекта Server.
dotnet publish -c ReleaseВариант 2: Передайте RID в команде
dotnet publishв качестве свойства MSBuild (/p:RuntimeIdentifier), а не с параметром-r|--runtime:dotnet publish -c Release /p:RuntimeIdentifier={RID}В предыдущей команде заполнитель
{RID}представляет собой Идентификатор среды выполнения (RID).
Дополнительные сведения см. в следующих статьях:
Автономное развертывание
Автономное развертывание обрабатывает приложение Blazor WebAssembly как набор статических файлов, которые будут запрашиваться непосредственно клиентами. Любой статический файловый сервер способен обслуживать приложение Blazor.
Автономные ресурсы развертывания публикуются в папке /bin/Release/{TARGET FRAMEWORK}/publish/wwwroot или bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish, где {TARGET FRAMEWORK} является целевой платформой.
Публикация без HTML-документа
Если приложение не использует HTML-документ, созданный в рамках процесса сборки и публикации .NET, негде разместить карту импорта. Например, этот сценарий возникает при публикации автономного Blazor приложения для использования приложением JavaScript/SPA через Blazor пользовательский элемент.
Чтобы избежать проблем с загрузкой ресурсов приложения на клиенте, отключите фингерпринтинг для и blazor.webassembly.js путем удаления свойства dotnet.js MSBuild (или установите его в значение <OverrideHtmlAssetPlaceholders>) в файле проекта приложения (false).
Служба приложений Azure
приложения Blazor WebAssembly можно развернуть в службах приложений Azure в Windows, где приложение размещается на IIS.
Развертывание автономного приложения Blazor WebAssembly в Служба приложений Azure для Linux в настоящее время не поддерживается. Мы рекомендуем разместить автономное приложение Blazor WebAssembly с помощью Статические веб-приложения Azure, которое поддерживает этот сценарий.
Автономная работа с Docker
Автономное Blazor WebAssembly приложение публикуется в виде набора статических файлов для размещения статическим файловым сервером.
Чтобы разместить приложение в Docker, выполните следующие действия.
- Выберите контейнер Docker с поддержкой веб-сервера, например Nginx или Apache.
- Скопируйте активы папки
publishв папку, определенную на веб-сервере для размещения статических файлов. - При необходимости примените дополнительную конфигурацию для обслуживания Blazor WebAssembly приложения.
Инструкции по настройке см. в следующих ресурсах:
Значения конфигурации хоста
Blazor WebAssembly приложения могут принимать следующие значения конфигурации узла в качестве аргументов командной строки во время выполнения в Development среде.
Корень содержимого
Аргумент --contentroot задает абсолютный путь к каталогу, где находятся файлы содержимого приложения (корневой каталог содержимого). В следующих примерах /content-root-path — это путь к корневому каталогу содержимого приложения.
Передайте этот аргумент при локальном запуске приложения в командной строке. Перейдите в каталог приложения и выполните следующую команду:
dotnet watch --contentroot=/content-root-pathДобавьте запись в файл приложения
launchSettings.jsonв профиле IIS Express. Этот параметр используется при запуске приложения с отладчиком Visual Studio и из командной строки сdotnet watch(илиdotnet run)."commandLineArgs": "--contentroot=/content-root-path"В Visual Studio укажите аргумент в Properties>Debug>Application arguments. При задании аргумента на странице свойств Visual Studio аргумент добавляется в файл
launchSettings.json.--contentroot=/content-root-path
Базовый путь
Аргумент --pathbase задает базовый путь приложения для локального выполнения с некорневым относительным путем URL (в теге <base> переменная href задана с путем, отличным от / для промежуточной и рабочей среды). В следующих примерах /relative-URL-path — это базовый путь приложения. Дополнительные сведения см. в разделе ASP.NET Core Blazor базовый путь приложения.
Important
В отличие от пути, заданного через href в теге <base>, не ставьте завершающую косую черту (/) когда передаёте значение аргумента --pathbase. Если основной путь приложения задан в теге <base> как <base href="/CoolApp/"> (включая косую черту в конце), передайте значение аргумента командной строки как --pathbase=/CoolApp (без косой черты в конце).
Передайте этот аргумент при локальном запуске приложения в командной строке. Перейдите в каталог приложения и выполните следующую команду:
dotnet watch --pathbase=/relative-URL-pathДобавьте запись в файл приложения
launchSettings.jsonв профиле IIS Express. Этот параметр используется при запуске приложения с отладчиком Visual Studio и из командной строки сdotnet watch(илиdotnet run)."commandLineArgs": "--pathbase=/relative-URL-path"В Visual Studio укажите аргумент в Properties>Debug>Application arguments. Задание аргумента на странице свойств Visual Studio добавляет аргумент в файл
launchSettings.json.--pathbase=/relative-URL-path
Дополнительные сведения см. в разделе ASP.NET Core Blazor базовый путь приложения.
URLs
Аргумент --urls задает IP-адреса или адреса узлов с портами и протоколами для прослушивания запросов.
Передайте этот аргумент при локальном запуске приложения в командной строке. Перейдите в каталог приложения и выполните следующую команду:
dotnet watch --urls=http://127.0.0.1:0Добавьте запись в файл приложения
launchSettings.jsonв профиле IIS Express. Этот параметр используется при запуске приложения с отладчиком Visual Studio и из командной строки сdotnet watch(илиdotnet run)."commandLineArgs": "--urls=http://127.0.0.1:0"В Visual Studio укажите аргумент в Properties>Debug>Application arguments. Задание аргумента на странице свойств Visual Studio добавляет аргумент в файл
launchSettings.json.--urls=http://127.0.0.1:0
Настройка средства обрезки
Blazor выполняет обрезку промежуточного языка (IL) в каждой сборке Release, чтобы удалить ненужный код IL из выходных сборок. Дополнительные сведения см. в разделе Настройка триммера для ASP.NET Core Blazor.
Настройте компоновщик
Blazor выполняет связывание промежуточного языка (IL) в каждой сборке Release, чтобы удалить ненужные части кода IL из выходных сборок. Подробнее см. в разделе Настройка компоновщика для ASP.NET Core Blazor.
Изменение расширения имени файла DLL-файлов
Этот раздел относится к .NET 5–.NET 7. В .NET 8 или позже сборки .NET развертываются в виде файлов WebAssembly (.wasm) с помощью формата файла Webcil.
Если брандмауэр, антивирусная программа или сетевое устройство безопасности блокирует передачу файлов библиотеки динамической компоновки (DLL) приложения (.dll), вы можете следовать инструкциям в этом разделе, чтобы изменить расширения имен файлов опубликованных DLL-файлов приложения.
Изменение расширений имен файлов DLL приложения может не устранить проблему, так как многие системы безопасности сканируют содержимое файлов приложения, а не просто проверяют расширения файлов.
Для более надежного подхода в средах, которые блокируют загрузку и выполнение DLL-файлов, выполните любой из следующих подходов:
- Используйте .NET 8 или более поздней версии, которая упаковывает сборки .NET в файлы WebAssembly (
.wasm) с помощью формата файла Webcil. Для получения дополнительной информации, см. раздел Webcil формат упаковки для сборок .NET в статьях версии .NET 8 или более поздних. - В .NET 6 или более поздней версии используйте пользовательский макет развертывания.
Сторонние подходы существуют для решения этой проблемы. Дополнительные сведения см. в ресурсах на Awesome Blazor.
После публикации приложения используйте скрипт оболочки или конвейер сборки DevOps для переименования .dll-файлов для использования другого расширения файла в каталоге опубликованных выходных данных приложения.
В следующих примерах:
- Для обновления расширений файлов используется PowerShell (PS).
- Файлы
.dllпереименовываются с использованием расширения имени файла.binиз командной строки. - Файлы, перечисленные в опубликованном Blazor манифесте загрузки с расширением
.dllфайла, обновляются до.binрасширения файла. - Если также используются ресурсы service worker, команда PowerShell обновляет файлы
.dll, перечисленные в файлеservice-worker-assets.js, изменяя расширение их имени на.bin.
Чтобы использовать расширение файла, отличное от .bin, замените .bin в приведенных ниже командах нужным расширением файла.
В следующих командах заполнитель {PATH} обозначает путь к опубликованной папке _framework в папке publish.
Переименуйте расширения файлов в папке:
dir {PATH} | rename-item -NewName { $_.name -replace ".dll\b",".bin" }
Переименуйте расширения файлов в blazor.boot.json файле:
((Get-Content {PATH}\blazor.boot.json -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\blazor.boot.json
Если рабочие ресурсы службы также используются, так как приложение является прогрессивным веб-приложением (PWA):
((Get-Content {PATH}\service-worker-assets.js -Raw) -replace '.dll"','.bin"') | Set-Content {PATH}\service-worker-assets.js
В предыдущей команде заполнитель {PATH} — это путь к опубликованному файлу service-worker-assets.js.
Чтобы устранить сжатый blazor.boot.json файл, выполните любой из следующих подходов:
- Повторно сжать обновленный
blazor.boot.jsonфайл, создав новыеblazor.boot.json.gzиblazor.boot.json.brфайлы. (Recommended) - Удалите сжатые файлы
blazor.boot.json.gzиblazor.boot.json.br. (Сжатие отключено с помощью этого подхода.)
Для сжатого файла service-worker-assets.js используйте любой из следующих подходов:
- Повторно сжать обновленный
service-worker-assets.jsфайл, создав новыеservice-worker-assets.js.brиservice-worker-assets.js.gzфайлы. (Recommended) - Удалите сжатые файлы
service-worker-assets.js.gzиservice-worker-assets.js.br. (Сжатие отключено с помощью этого подхода.)
Чтобы автоматизировать изменение расширения на Windows в .NET 6/7, следующий подход использует скрипт PowerShell, размещенный в корне проекта. Следующий скрипт, который отключает сжатие, является основой для дальнейшего изменения, если вы хотите повторно сжать blazor.boot.json файл и service-worker-assets.js файл, если приложение является прогрессивным веб-приложением (PWA). Путь к publish папке передается скрипту при выполнении.
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
Если рабочие ресурсы службы также используются, так как приложение является прогрессивным веб-приложением (PWA), добавьте следующие команды:
((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
В файле проекта скрипт выполняется после публикации приложения для конфигурации Release:
<Target Name="ChangeDLLFileExtensions" AfterTargets="AfterPublish" Condition="'$(Configuration)'=='Release'">
<Exec Command="powershell.exe -command "& {.\ChangeDLLExtensions.ps1 '$(SolutionDir)'}"" />
</Target>
После публикации приложения вручную повторно выполните сжатие blazor.boot.json, и при использовании - service-worker-assets.js, чтобы снова включить сжатие.
Note
При переименовании и ленивой загрузке одинаковых сборок см. руководство по сборкам Lazy load в ASP.NET Core Blazor WebAssembly.
Как правило, серверу приложения требуется настройка статического ресурса для обслуживания файлов с обновленным расширением. Для приложения, размещенного в IIS, добавьте запись карты MIME (<mimeMap>) для нового расширения файла в разделе статического содержимого (<staticContent>) в пользовательском файле web.config. В следующем примере предполагается, что расширение файла изменено на .dll.bin:
<staticContent>
...
<mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
...
</staticContent>
Включите обновление для сжатых файлов, если сжатие используется:
<mimeMap fileExtension=".bin.br" mimeType="application/octet-stream" />
<mimeMap fileExtension=".bin.gz" mimeType="application/octet-stream" />
Удалите запись для файлового расширения .dll.
- <mimeMap fileExtension=".dll" mimeType="application/octet-stream" />
Удалите записи для сжатых .dll файлов, если сжатие используется:
- <mimeMap fileExtension=".dll.br" mimeType="application/octet-stream" />
- <mimeMap fileExtension=".dll.gz" mimeType="application/octet-stream" />
Дополнительные сведения о пользовательских web.config файлах смотрите в разделе «Использование пользовательского web.config».
Нарушение данных перед развертыванием
Обычно при развертывании:
- Заменяются только измененные файлы, что обычно приводит к ускорению развертывания.
- Существующие файлы, не являющиеся частью нового развертывания, остаются на месте для использования в новом развертывании.
В редких случаях устаревшие файлы из предыдущих развертываний могут повредить новое развертывание. Полное удаление существующего развертывания (или локально размещённого приложения перед развертыванием) может помочь устранить проблему с повреждённым развертыванием. Часто для устранения проблемы достаточно удалить существующее развертывание однократно, в том числе для конвейера сборки и развертывания DevOps.
Если вы определили, что очистка до развертывания всегда требуется при использовании конвейера сборки и развертывания DevOps, можно временно добавить шаг в конвейер сборки, чтобы удалить прежнее развертывание для каждого нового развертывания, пока не будет устранена точная причина повреждения.
ASP.NET Core