Configuración del enlazador de ASP.NET Core Blazor
En este artículo se explica cómo controlar al enlazador de lenguaje intermedio (IL) al compilar una aplicación Blazor.
Blazor WebAssembly realiza la vinculación de lenguaje intermedio (IL) durante una compilación para reducir el IL innecesario de los ensamblados de salida de la aplicación. El enlazador está deshabilitado durante la compilación en la configuración Debug. Las aplicaciones deben compilarse en la configuración Release para habilitar el enlazador. Se recomienda compilar en Release cuando se implementen las aplicaciones Blazor WebAssembly.
La vinculación de una aplicación optimiza el tamaño, pero puede tener efectos perjudiciales. Las aplicaciones que usan la reflexión u otras características dinámicas relacionadas podrían interrumpirse al ser recortadas porque el vinculador no conoce este comportamiento dinámico y no puede determinar, en general, qué tipos se necesitan para la reflexión en el tiempo de ejecución. Para reducir estas aplicaciones, se debe informar al vinculador de los tipos necesarios para la reflexión en el código y en los paquetes o marcos de trabajo de los que depende la aplicación.
Para asegurarse de que la aplicación reducida funciona correctamente una vez implementada, es importante probar las compilaciones de Release de la aplicación con frecuencia durante el desarrollo.
La vinculación de las aplicaciones de Blazor se puede configurar con estas características de MSBuild:
- Configuración de la vinculación global con una propiedad de MSBuild.
- Control de la vinculación por cada ensamblado con un archivo de configuración.
Control de la vinculación con una propiedad de MSBuild
La vinculación se habilita cuando una aplicación se compila en la configuración Release
. Para cambiar esto, configura la propiedad BlazorWebAssemblyEnableLinking
de MSBuild en el archivo del proyecto:
<PropertyGroup>
<BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>
Control de la vinculación con un archivo de configuración
Control de la vinculación por cada ensamblado al proporcionar un archivo de configuración XML y especificar el archivo como un elemento MSBuild en el archivo de proyecto:
<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 obtener más información y ejemplos, consulta Formatos de datos (repositorio dotnet/linker de GitHub).
Adición de un archivo de configuración del enlazador XML a una biblioteca
Para configurar el enlazador para una biblioteca específica, agrega un archivo de configuración de enlazador XML a la biblioteca como un recurso incrustado. El recurso incrustado debe tener el mismo nombre que el ensamblado.
En el ejemplo siguiente, el archivo LinkerConfig.xml
se especifica como un recurso incrustado que tiene el mismo nombre que el ensamblado de la biblioteca:
<ItemGroup>
<EmbeddedResource Include="LinkerConfig.xml">
<LogicalName>$(MSBuildProjectName).xml</LogicalName>
</EmbeddedResource>
</ItemGroup>
Configuración del enlazador para la internacionalización
La configuración del enlazador de Blazor para aplicaciones Blazor WebAssembly quita información de internacionalización, excepto para las configuraciones regionales solicitadas de forma explícita. Al quitar estos ensamblados se minimiza el tamaño de la aplicación.
Para controlar qué ensamblados de I18N se conservan, establece la propiedad <BlazorWebAssemblyI18NAssemblies>
de MSBuild en el archivo de proyecto:
<PropertyGroup>
<BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Valor de región | Ensamblado de región de Mono |
---|---|
all |
Todos los ensamblados incluidos |
cjk |
I18N.CJK.dll |
mideast |
I18N.MidEast.dll |
none (valor predeterminado) |
None |
other |
I18N.Other.dll |
rare |
I18N.Rare.dll |
west |
I18N.West.dll |
Usa una coma para separar varios valores (por ejemplo, mideast,west
).
Para obtener más información, consulta I18N: biblioteca del marco de internacionalización Pnetlib (repositorio de GitHub mono/mono).