Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Это не последняя версия этой статьи. В текущей версии см. версию .NET 10 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в политике поддержки .NET и .NET Core. В текущей версии см. версию .NET 10 этой статьи.
В этой статье описываются средства сборки для автономных Blazor WebAssembly приложений и компиляция приложения перед развертыванием с помощью предварительной компиляции (AOT).
Инструменты сборки WebAssembly .NET
Средства компиляции .NET WebAssembly основаны на цепочке инструментов Emscripten для веб-платформы.
Чтобы установить средства сборки в качестве рабочей нагрузки .NET, используйте любой из следующих подходов:
Для рабочей нагрузки ASP.NET и веб-разработки в установщике Visual Studio выберите параметр средства сборки .NET WebAssembly в списке дополнительных компонентов. Этот параметр гарантирует следующее:
- Рабочая нагрузка устанавливается для последнего пакета SDK для .NET.
- Когда выпущена новая версия Visual Studio и содержит новый пакет SDK для .NET, параметр устанавливает рабочую нагрузку для нового пакета SDK.
Кроме того, выполните следующую команду в командной оболочке администрирования , чтобы установить последнюю рабочую нагрузку на последнюю версию пакета SDK для .NET, доступного в системе:
dotnet workload install wasm-tools
Чтобы нацелиться на предыдущий выпуск .NET с определённым пакетом SDK для .NET, установите рабочую нагрузку wasm-tools-net{MAJOR VERSION} :
- Заполнитель
{MAJOR VERSION}замещается основным номером версии .NET, на которую вы хотите нацелиться (например,wasm-tools-net8для .NET 8). - Рабочие нагрузки устанавливаются в рамках пакета SDK для .NET. Установка рабочей нагрузки
wasm-toolsдля одного пакета SDK не делает его доступным для других пакетов SDK в системе. - Необходимо установить соответствующую рабочую нагрузку для каждой версии пакета SDK для .NET, которую вы планируете использовать.
В следующем списке показано, какая рабочая нагрузка устанавливается для каждого пакета SDK для .NET в зависимости от целевых приложений. Хотя несколько строк могут содержать одно и то же имя рабочей нагрузки, рабочие нагрузки всегда отличаются немного для каждого конкретного пакета SDK для .NET.
- Использование пакета SDK для .NET 10
- Для целевого объекта .NET 10 требуется
wasm-tools. - Для целевой платформы .NET 9 требуется
wasm-tools-net9. - Чтобы использовать .NET 8 в качестве целевой платформы, требуется
wasm-tools-net8.
- Для целевого объекта .NET 10 требуется
- Использование пакета SDK для .NET 9
- Для целевой платформы .NET 9 требуется
wasm-tools. - Чтобы использовать .NET 8 в качестве целевой платформы, требуется
wasm-tools-net8.
- Для целевой платформы .NET 9 требуется
- Использование пакета SDK для .NET 8: для .NET 8 требуется
wasm-tools.
Цепочка инструментов компилятора Emscripten зависит от Python, который по умолчанию входит в состав рабочей нагрузки средств сборки .NET WebAssembly в Windows и macOS.
Python не входит в пакет для пользователей Linux, что приводит к ошибкам "не удается найти python в $PATH", если Python недоступен. Пользователи Linux должны установить Python с помощью диспетчера пакетов или скачать Python для Linux или Unix и вручную установить его в своей системе, чтобы он был доступен в $PATH.
Компиляция "Ahead-of-time" (AOT)
Blazor WebAssembly поддерживает упреждающую компиляцию (AOT), с помощью которой вы можете скомпилировать код .NET непосредственно в WebAssembly. Компиляция AOT позволяет повысить производительность среды выполнения за счет увеличения размера приложения.
Без AOT-компиляции приложения работают в браузере посредством интерпретатора промежуточного языка .NET Blazor WebAssembly, реализованного в WebAssembly с частичной поддержкой выполнения JIT, неофициально именуемым Jiterpreter. Так как код .NET IL интерпретируется, приложения обычно выполняются медленнее, чем если бы они работали в серверной среде выполнения JIT без интерпретации IL. Компиляция AOT решает эту проблему с производительностью, компилируя код .NET приложения непосредственно в WebAssembly для его выполнения в браузере. Повышение производительности AOT может привести к значительному улучшению приложений, выполняющих ресурсоемкие задачи. Недостаток использования компиляции AOT заключается в том, что приложения, скомпилированные с помощью AOT, обычно больше их аналогов, интерпретируемых с помощью IL, поэтому загрузка клиента при первом запросе обычно занимает больше времени.
Без включения компиляции Blazor WebAssembly AOT приложения выполняются в браузере с помощью интерпретатора промежуточного языка .NET (IL), реализованного в WebAssembly. Поскольку код .NET интерпретируется, приложения обычно выполняются медленнее, чем они бы выполнялись на стороне серверной среды выполнения JIT .NET. Компиляция AOT решает эту проблему с производительностью, компилируя код .NET приложения непосредственно в WebAssembly для его выполнения в браузере. Повышение производительности AOT может привести к значительному улучшению приложений, выполняющих ресурсоемкие задачи. Недостаток использования компиляции AOT заключается в том, что приложения, скомпилированные с помощью AOT, обычно больше их аналогов, интерпретируемых с помощью IL, поэтому загрузка клиента при первом запросе обычно занимает больше времени.
Инструкции по установке средств сборки .NET WebAssembly см. в статье Средства сборки ASP.NET Core Blazor WebAssembly и компиляция в режиме предварительной компиляции (AOT).
Чтобы включить компиляцию AOT WebAssembly, добавьте свойство <RunAOTCompilation>, которому присвоено значение true, в файл проекта приложения Blazor WebAssembly:
<PropertyGroup>
<RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>
Чтобы скомпилировать приложение в WebAssembly, опубликуйте приложение. Публикация конфигурации Release гарантирует, что для уменьшения размера опубликованного приложения также выполняется линковка промежуточного языка .NET (IL).
dotnet publish -c Release
Компиляция WebAssembly AOT выполняется только при публикации проекта. Компиляция AOT не используется, когда проект запускается в среде разработки (Development), поскольку компиляция небольших проектов обычно занимает несколько минут, а для больших проектов может занимать значительно больше времени. Сокращение времени сборки для компиляции AOT планируется в будущих выпусках ASP.NET Core.
Размер приложения Blazor WebAssembly, скомпилированного в режиме AOT, обычно превышает размер приложения, скомпилированного в IL .NET.
Несмотря на то, что разница в размере зависит от приложения, большинство приложений, скомпилированных в режиме AOT, вдвое больше их версий, скомпилированных с помощью IL. Это означает, что при использовании компиляции AOT жертвуют производительностью при загрузке ради улучшенной производительности во время выполнения. Следует оценить, стоит ли использовать AOT-компиляцию, исходя из особенностей вашего приложения. Обычно преимущества компиляции AOT ощутимы для приложений Blazor WebAssembly, которые потребляют много ресурсов ЦП.
Больший размер приложения, скомпилированного в режиме AOT, обусловлен двумя условиями:
- Требуется больше кода для представления высокоуровневых инструкций IL .NET в собственном формате WebAssembly.
- AOT не обрезает управляемые библиотеки DLL при публикации приложения. Blazor требует библиотек DLL для метаданных отражения и поддержки некоторых функций среды выполнения .NET. Требование использовать библиотеки DLL в клиенте увеличивает размер скачиваемых ресурсов, но обеспечивает более совместимый интерфейс .NET.
Примечание.
Сведения о свойствах и целевых объектах MSBuild Mono/WebAssembly см. в разделе WasmApp.Common.targets (dotnet/runtimeрепозиторий GitHub). Планируется разработка официальной документации по общим свойствам MSBuild в рамках задачи Документировать параметры конфигурации blazor для msbuild (dotnet/docs #27395).
Производительность
Рекомендации по производительности см. в разделе ASP.NET Core Производительность среды выполненияBlazor WebAssembly:
- Размер кучи для некоторых браузеров мобильных устройств
- Перелинковка среды выполнения
- Одна инструкция, несколько данных (SIMD)
- Обрезать .NET IL после предварительной компиляции (AOT) (.NET 8 или более поздней версии)
Обработка исключений
Обработка исключений включена по умолчанию. Чтобы отключить обработку исключений, добавьте <WasmEnableExceptionHandling> свойство со значением false в файле проекта приложения (.csproj):
<PropertyGroup>
<WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>
Чтобы включить обработку исключений WebAssembly, в файле проекта приложения (<WasmEnableExceptionHandling>) добавьте свойство true со значением .csproj.
<PropertyGroup>
<WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>
Дополнительные сведения см. на следующих ресурсах:
Дополнительные ресурсы
ASP.NET Core