Compartilhar via


Ferramentas de build do ASP.NET Core Blazor WebAssembly e compilação antecipada (AOT)

Observação

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão do .NET 10 deste artigo.

Aviso

Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, consulte a Política de Suporte do .NET e do .NET Core. Para a versão atual, consulte a versão do .NET 10 deste artigo.

Este artigo descreve as ferramentas de build para aplicativos Blazor WebAssembly autônomos e como compilar um aplicativo antes da implantação com compilação AOT (antecipada).

Ferramentas de compilação do .NET WebAssembly

As ferramentas de build do .NET WebAssembly são baseadas no Emscripten, uma cadeia de ferramentas do compilador para a plataforma Web.

Para instalar as ferramentas de build como uma carga de trabalho do .NET, use uma das seguintes abordagens:

  • Para a carga de trabalho ASP.NET e desenvolvimento para a Web no instalador do Visual Studio, selecione a opção ferramentas de build do .NET WebAssembly na lista de componentes opcionais. A opção garante o seguinte:

    • A carga de trabalho está instalada para o SDK do .NET mais recente.
    • Quando uma nova versão do Visual Studio é lançada e contém um novo SDK do .NET, a opção instala a carga de trabalho para o novo SDK.
  • Como alternativa, execute o seguinte comando em um shell de comando administrativo para instalar a carga de trabalho mais recente no SDK do .NET mais recente disponível no sistema:

    dotnet workload install wasm-tools
    

** Para compatibilidade com uma versão anterior específica do .NET usando um determinado SDK do .NET, instale a wasm-tools-net{MAJOR VERSION} carga de trabalho:

  • O {MAJOR VERSION} espaço reservado é substituído pelo número principal da versão do .NET que você deseja direcionar (por exemplo, wasm-tools-net8 para o .NET 8).
  • As cargas de trabalho são instaladas por SDK do .NET. A instalação do perfil de trabalho wasm-tools para um SDK não o disponibiliza para outros SDKs no sistema.
  • Você deve instalar a carga de trabalho apropriada para cada versão do SDK do .NET que pretende usar.

A lista a seguir mostra qual carga de trabalho instalar para cada SDK do .NET, dependendo dos aplicativos que você planeja direcionar. Embora várias linhas possam conter o mesmo nome de carga de trabalho, as cargas de trabalho sempre diferem ligeiramente para cada SDK do .NET específico.

  • Usando o SDK do .NET 10
    • O direcionamento do .NET 10 requer wasm-tools.
    • O direcionamento do .NET 9 requer wasm-tools-net9.
    • O direcionamento para o .NET 8 requer wasm-tools-net8.
  • Usando o SDK do .NET 9
    • O direcionamento do .NET 9 requer wasm-tools.
    • O direcionamento para o .NET 8 requer wasm-tools-net8.
  • O uso do SDK do .NET 8: o direcionamento do .NET 8 requer wasm-tools.

Compilação AOT (Ahead Of Time)

Blazor WebAssembly dá suporte à compilação AOT (Ahead Of Time), em que você pode compilar seu código do .NET diretamente no WebAssembly. A compilação AOT resulta em melhorias no desempenho em tempo de execução, em detrimento de um tamanho maior do aplicativo.

Sem habilitar a compilação AOT, os aplicativos Blazor WebAssembly são executados no navegador usando um interpretador de IL (Linguagem Intermediária ) do .NET implementado no WebAssembly com suporte parcial de um runtime just-in-time (JIT), chamado informalmente de Jiterpreter. Como o código IL do .NET é interpretado, os aplicativos normalmente são executados mais lentamente do que em um runtime do .NET JIT do lado do servidor sem qualquer interpretação de IL. A compilação AOT resolve esse problema de desempenho compilando o código do .NET de um aplicativo diretamente no WebAssembly para execução nativa do WebAssembly pelo navegador. A melhoria no desempenho AOT pode gerar grandes melhorias para aplicativos que executam tarefas com uso intensivo de CPU. A desvantagem de usar a compilação AOT é que os aplicativos com compilação AOT geralmente são maiores do que seus equivalentes interpretados por IL. Portanto, geralmente levam mais tempo para serem baixados no cliente, quando solicitados pela primeira vez.

Sem habilitar a compilação AOT, os aplicativos Blazor WebAssembly são executados no navegador usando um interpretador de IL (Linguagem Intermediária) do .NET implementado no WebAssembly. Como o código do .NET é traduzido, os aplicativos normalmente são executados mais lentamente do que em um runtime JIT do .NET do lado do servidor. A compilação AOT resolve esse problema de desempenho compilando o código do .NET de um aplicativo diretamente no WebAssembly para execução nativa do WebAssembly pelo navegador. A melhoria no desempenho AOT pode gerar grandes melhorias para aplicativos que executam tarefas com uso intensivo de CPU. A desvantagem de usar a compilação AOT é que os aplicativos com compilação AOT geralmente são maiores do que seus equivalentes interpretados por IL. Portanto, geralmente levam mais tempo para serem baixados no cliente, quando solicitados pela primeira vez.

Para obter diretrizes sobre como instalar as ferramentas de build do .NET WebAssembly, consulte Ferramentas de criação e compilação antecipada (AOT) do Blazor WebAssembly no ASP.NET Core.

Para habilitar a compilação AOT do WebAssembly, adicione a propriedade <RunAOTCompilation> definida como true ao arquivo de projeto do aplicativo Blazor WebAssembly:

<PropertyGroup>
  <RunAOTCompilation>true</RunAOTCompilation>
</PropertyGroup>

Para compilar o aplicativo no WebAssembly, publique o aplicativo. Publicar a configuração do Release garante que a vinculação de IL (Linguagem Intermediária) do .NET também seja executada para reduzir o tamanho do aplicativo publicado:

dotnet publish -c Release

A compilação AOT do WebAssembly só é executada quando o projeto é publicado. A compilação AOT não é usada quando o projeto é executado durante o desenvolvimento (ambiente Development), pois a compilação AOT geralmente leva vários minutos em projetos pequenos e possivelmente muito mais tempo para projetos maiores. A redução no tempo de compilação AOT está em desenvolvimento para as próximas versões do ASP.NET Core.

Um aplicativo Blazor WebAssembly com compilação AOT geralmente é maior do que um aplicativo compilado na IL do .NET:

  • Embora a diferença de tamanho dependa do aplicativo, a maioria dos aplicativos com compilação AOT tem cerca de duas vezes o tamanho das versões com compilação de IL. Isso significa que o uso da compilação AOT troca o desempenho no tempo de carregamento pelo desempenho durante o tempo de execução. Se essa troca vale a pena usando a compilação AOT depende do seu aplicativo. Aplicativos Blazor WebAssembly que têm uso intensivo de CPU geralmente se beneficiam mais da compilação AOT.

  • O maior tamanho de um aplicativo compilado com AOT é devido a duas condições:

    • Mais código é necessário para representar as instruções de IL do .NET de alto nível no WebAssembly nativo.
    • A compilação AOT não corta as DLLs gerenciadas quando o aplicativo é publicado. O Blazor requer DLLs para metadados de reflexão e para compatibilidade com determinados recursos de runtime do .NET. Exigir as DLLs no cliente aumenta o tamanho do download, mas proporciona uma experiência do .NET mais compatível.

Observação

Para propriedades e alvos do MSBuild Mono/WebAssembly, confira WasmApp.Common.targets (repositório do GitHub dotnet/runtime). A documentação oficial para propriedades comuns do MSBuild é planejada de acordo com as opções de configuração do documento do MSBuild do Blazor (dotnet/docs #27395).

Desempenho

Para obter diretrizes de desempenho, consulte desempenho em tempo de execução do ASP.NET CoreBlazor WebAssembly:

  • Tamanho de heap para alguns navegadores de dispositivos móveis
  • Nova vinculação de runtime
  • Instrução Única, Múltiplos Dados (SIMD)
  • Cortar o .NET IL após a compilação antecipada (AOT) (.NET 8 ou posterior)

Tratamento de exceções

O tratamento de exceção é habilitado por padrão. Para desabilitar o tratamento de exceção, adicione a propriedade <WasmEnableExceptionHandling> com um valor de false no arquivo de projeto do aplicativo (.csproj):

<PropertyGroup>
  <WasmEnableExceptionHandling>false</WasmEnableExceptionHandling>
</PropertyGroup>

Para habilitar o tratamento de exceção do WebAssembly, adicione a propriedade <WasmEnableExceptionHandling> com um valor de true no arquivo de projeto do aplicativo (.csproj):

<PropertyGroup>
  <WasmEnableExceptionHandling>true</WasmEnableExceptionHandling>
</PropertyGroup>

Para saber mais, consulte os recursos a seguir:

Recursos adicionais