Combinación de ensamblados
Puede combinar ensamblados con la herramienta de línea de comandos babel, con la tarea Babel de MSBuild o con Babel Desktop.
Las aplicaciones Avalonia no se pueden combinar. Avalonia compila el XAML de cada ensamblado en tipos CompiledAvaloniaXaml propios de ese ensamblado y en un único blob !AvaloniaResources, y resuelve los recursos mediante URI avares://<AssemblyName>/… cuya clave es la identidad del ensamblado. Al combinar los ensamblados que contienen XAML, esos tipos y recursos entran en conflicto y la resolución de avares:// falla en tiempo de ejecución. Para distribuir una aplicación Avalonia como un único archivo, use en su lugar la incrustación de ensamblados, que conserva la identidad de cada ensamblado.
Combinar desde la línea de comandos
Con la herramienta babel, puede combinar ensamblados indicando el ensamblado de destino seguido de la lista de archivos de ensamblado que se van a combinar con el ensamblado principal, además de cualquier otra opción de configuración:
babel <primary assembly source> [<other assemblies>...] [options]Babel Obfuscator ofrece varias opciones para configurar la combinación de ensamblados.
—[no]copyattrs [regex]
Esta opción permite indicar si Babel debe copiar los atributos de nivel de ensamblado en el ensamblado principal. También se puede especificar una expresión regular opcional que coincida con el nombre completo de los atributos que deben combinarse. Se pueden escribir varias opciones --copyattrs para especificar varios filtros de atributos. Para desactivar la copia de los atributos de nivel de ensamblado, use la opción --nocopyattrs.
Si se copian los atributos de nivel de ensamblado, se pueden usar reglas XML para filtrar los atributos que se copian o se excluyen mediante las propiedades CopyAttributes y NoCopyAttributes, que aceptan una expresión regular que coincida con el nombre de tipo completo del atributo de nivel de ensamblado:
<Rule name="merge attributes" feature="merge" exclude="false">
<Target>Assembly</Target>
<Pattern>*</Pattern>
<Properties>
<NoCopyAttributes>.*TypeLibVersion</NoCopyAttributes>
</Properties>
</Rule>La expresión de filtro CopyAttributes sirve para incluir de forma selectiva atributos de nivel de ensamblado en el ensamblado combinado según el nombre completo de su tipo de atributo. Es decir, solo los atributos que coinciden con la expresión de filtro se combinan en el ensamblado de destino, y todos los demás se excluyen.
Por el contrario, la expresión de filtro NoCopyAttributes sirve para excluir de forma selectiva atributos de nivel de ensamblado del ensamblado combinado según el nombre completo de su tipo de atributo. Esto significa que los atributos que coinciden con la expresión de filtro no se combinan en el ensamblado de destino, y todos los demás se incluyen.
—[no]internalize:
Cuando está activada, cambia la visibilidad de todos los tipos de los ensamblados combinados de pública a interna.
Cambiar la visibilidad de los tipos puede impedir que los tipos combinados se usen fuera del ensamblado principal, por lo que esta opción solo debe activarse si los tipos combinados están pensados para que los use únicamente el ensamblado principal.
Combinar desde la tarea Babel de MSBuild
Para combinar ensamblados con la tarea Babel, debe definir un elemento ItemGroup adicional en el archivo de proyecto de MSBuild. Este ItemGroup contiene todos los ensamblados que desea combinar con el ensamblado principal. La tarea Babel usa después este ItemGroup para realizar la combinación durante el proceso de compilación.
Este es un ejemplo de cómo definir el elemento ItemGroup:
<ItemGroup>
<MergeAssembly Include="path/to/assembly1.dll"/>
<MergeAssembly Include="path/to/assembly2.dll"/>
</ItemGroup>En este ejemplo, path/to/assembly1.dll y path/to/assembly2.dll son las rutas de los ensamblados que desea combinar con el ensamblado principal. Puede incluir en el ItemGroup tantos ensamblados como necesite.
Una vez definido el ItemGroup, puede pasarlo a la tarea Babel mediante el parámetro MergeAssemblies:
<Babel MergeAssemblies="@(MergeAssembly)" Internalize="true" />El atributo Internalize indica si la visibilidad de los tipos combinados debe cambiarse de pública a interna.
Combinar desde Babel Desktop
Para combinar ensamblados con Babel Desktop, siga estos pasos:
Abrir o crear un proyecto
Abra un proyecto existente o cree uno nuevo.
Añadir los ensamblados
Añada al diagrama del proyecto el ensamblado principal y los ensamblados que se van a combinar.
Conectar las dependencias
Conecte cada dependencia con el ensamblado principal: arrastre desde el anclaje inferior de la dependencia hasta el anclaje superior del ensamblado principal.
Establecer el tipo de conexión en Combinar
Compruebe que el tipo de conexión es Combinar. Las conexiones nuevas seleccionan Combinar automáticamente cuando el ensamblado principal hace referencia a la dependencia; en caso contrario, haga clic en la conexión y cambie su tipo.
Configurar las opciones de combinación
Seleccione el ensamblado principal para configurar en el panel de propiedades las opciones de combinación, como Internalize y CopyAttributes, en el grupo Optimización.
Consulte Proyectos de ofuscación para saber más sobre el diagrama del proyecto.