Partilhar via


Configurar o vinculador para ASP.NET núcleo Blazor

Este artigo explica como controlar o vinculador de linguagem intermediária (IL) para cenários do lado do cliente ao criar um Blazor aplicativo.

Blazor WebAssembly executa a vinculação de linguagem intermediária (IL) durante uma compilação para cortar IL desnecessário dos assemblies de saída do aplicativo. O ligador é desativado ao compilar na configuração de Debug. Os aplicativos devem ser compilados na configuração Release para habilitar o vinculador. Recomendamos criar em Release ao implantar seus Blazor WebAssembly aplicativos.

A vinculação de um aplicativo otimiza o tamanho, mas pode ter efeitos prejudiciais. Os aplicativos que usam reflexão ou recursos dinâmicos relacionados podem quebrar quando cortados porque o vinculador não sabe sobre esse comportamento dinâmico e não pode determinar em geral quais tipos são necessários para reflexão em tempo de execução. Para cortar esses aplicativos, o vinculador deve ser informado sobre quaisquer tipos exigidos pela reflexão no código e em pacotes ou estruturas dos quais o aplicativo depende.

Para garantir que a aplicação reduzida funcione corretamente depois de implantada, é importante testar frequentemente as versões de produção da aplicação durante o desenvolvimento.

A vinculação para Blazor aplicativos pode ser configurada usando estes recursos do MSBuild:

Controlar a vinculação com uma propriedade MSBuild

Por padrão, a vinculação é habilitada quando um aplicativo é criado na Release configuração. Para desabilitar a vinculação, configure a BlazorWebAssemblyEnableLinking propriedade MSBuild no arquivo de projeto:

<PropertyGroup>
  <BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>

Controlar a vinculação com um arquivo de configuração

Controle a ligação por montagem fornecendo um ficheiro de configuração XML e especificando o ficheiro como um item do MSBuild no ficheiro de projeto:

<ItemGroup>
  <BlazorLinkerDescriptor Include="LinkerConfig.xml" />
</ItemGroup>

LinkerConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!--
  This file specifies which parts of the BCL or Blazor packages must not be
  stripped by the IL Linker even if they aren't referenced by user code.
-->
<linker>
  <assembly fullname="mscorlib">
    <!--
      Preserve the methods in WasmRuntime because its methods are called by 
      JavaScript client-side code to implement timers.
      Fixes: https://github.com/dotnet/blazor/issues/239
    -->
    <type fullname="System.Threading.WasmRuntime" />
  </assembly>
  <assembly fullname="System.Core">
    <!--
      System.Linq.Expressions* is required by Json.NET and any 
      expression.Compile caller. The assembly isn't stripped.
    -->
    <type fullname="System.Linq.Expressions*" />
  </assembly>
  <!--
    In this example, the app's entry point assembly is listed. The assembly
    isn't stripped by the IL Linker.
  -->
  <assembly fullname="MyCoolBlazorApp" />
</linker>

Para obter mais informações e exemplos, consulte Formatos de dados (dotnet/runtimerepositório GitHub).

Adicionar um arquivo de configuração do vinculador XML a uma biblioteca

Para configurar o vinculador para uma biblioteca específica, adicione um arquivo de configuração do vinculador XML à biblioteca como um recurso incorporado. O recurso incorporado deve ter o mesmo nome que a montagem.

No exemplo a seguir, o LinkerConfig.xml arquivo é especificado como um recurso incorporado que tem o mesmo nome que o assembly da biblioteca:

<ItemGroup>
  <EmbeddedResource Include="LinkerConfig.xml">
    <LogicalName>$(MSBuildProjectName).xml</LogicalName>
  </EmbeddedResource>
</ItemGroup>

Configurar o vinculador para internacionalização

BlazorA configuração do vinculador do para Blazor WebAssembly aplicativos elimina as informações de internacionalização, exceto para localidades explicitamente solicitadas. A remoção desses assemblies minimiza o tamanho do aplicativo.

Para controlar quais assemblies I18N são mantidos, defina a <BlazorWebAssemblyI18NAssemblies> propriedade MSBuild no arquivo de projeto:

<PropertyGroup>
  <BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Valor da região Assembleia da região de Mono
all Todas as montagens incluídas
cjk I18N.CJK.dll
mideast I18N.MidEast.dll
none (padrão) None
other I18N.Other.dll
rare I18N.Rare.dll
west I18N.West.dll

Use uma vírgula para separar vários valores (por exemplo, mideast,west).

Para obter mais informações, consulte I18N: Pnetlib Internationalization Framework Library (repositório GitHub mono/mono).

Recursos adicionais