Unione di assembly
Puoi unire gli assembly con lo strumento da riga di comando babel, con il task Babel di MSBuild o con Babel Desktop.
Le applicazioni Avalonia non possono essere unite. Avalonia compila lo XAML di ogni assembly in tipi CompiledAvaloniaXaml specifici dell’assembly e in un unico blob !AvaloniaResources, e risolve le risorse tramite URI avares://<AssemblyName>/… basati sull’identità dell’assembly. L’unione degli assembly che contengono XAML fa entrare in conflitto questi tipi e queste risorse e interrompe la risoluzione di avares:// in fase di esecuzione. Per distribuire un’applicazione Avalonia come file singolo usa invece l’incorporamento di assembly, che preserva l’identità di ogni assembly.
Unire dalla riga di comando
Con lo strumento babel puoi unire gli assembly indicando l’assembly target seguito dall’elenco dei file di assembly da unire all’assembly principale e da eventuali altre opzioni di configurazione:
babel <primary assembly source> [<other assemblies>...] [options]Babel Obfuscator fornisce diverse opzioni per configurare l’unione di assembly.
—[no]copyattrs [regex]
Questa opzione indica se Babel deve copiare nell’assembly principale gli attributi a livello di assembly. Puoi anche specificare un’espressione regolare facoltativa che corrisponde al nome completo degli attributi da unire. Puoi ripetere --copyattrs più volte per specificare più filtri di attributi. Per disabilitare la copia degli attributi a livello di assembly, usa --nocopyattrs.
Se gli attributi a livello di assembly vengono copiati, puoi usare le regole XML per filtrare gli attributi da copiare o da escludere con le proprietà CopyAttributes e NoCopyAttributes, che accettano un’espressione regolare confrontata con il nome completo del tipo dell’attributo a livello di assembly:
<Rule name="merge attributes" feature="merge" exclude="false">
<Target>Assembly</Target>
<Pattern>*</Pattern>
<Properties>
<NoCopyAttributes>.*TypeLibVersion</NoCopyAttributes>
</Properties>
</Rule>L’espressione di filtro CopyAttributes serve a includere in modo selettivo nell’assembly unito gli attributi a livello di assembly, in base al nome completo del tipo dell’attributo. In altre parole, solo gli attributi che corrispondono all’espressione di filtro vengono uniti nell’assembly target, mentre tutti gli altri vengono esclusi.
L’espressione di filtro NoCopyAttributes serve invece a escludere in modo selettivo dall’assembly unito gli attributi a livello di assembly, in base al nome completo del tipo dell’attributo. Tutti gli attributi che corrispondono all’espressione di filtro non vengono quindi uniti nell’assembly target, mentre tutti gli altri vengono inclusi.
—[no]internalize:
Quando è abilitata, cambia la visibilità di tutti i tipi degli assembly uniti da public a internal.
La modifica della visibilità dei tipi può impedire l’uso dei tipi uniti al di fuori dell’assembly principale, quindi abilita questa opzione solo se i tipi uniti sono destinati a essere usati esclusivamente dall’assembly principale.
Unire dal task Babel di MSBuild
Per unire assembly con il task Babel devi definire un ulteriore elemento ItemGroup nel file di progetto MSBuild. Questo ItemGroup contiene tutti gli assembly che vuoi unire all’assembly principale. Il task Babel usa poi questo ItemGroup per eseguire l’unione durante la build.
Ecco un esempio di come definire l’elemento ItemGroup:
<ItemGroup>
<MergeAssembly Include="path/to/assembly1.dll"/>
<MergeAssembly Include="path/to/assembly2.dll"/>
</ItemGroup>In questo esempio path/to/assembly1.dll e path/to/assembly2.dll sono i percorsi degli assembly che vuoi unire all’assembly principale. In ItemGroup puoi includere tutti gli assembly che ti servono.
Dopo aver definito ItemGroup, puoi passarlo al task Babel con il parametro MergeAssemblies:
<Babel MergeAssemblies="@(MergeAssembly)" Internalize="true" />L’attributo Internalize indica se cambiare la visibilità dei tipi uniti da public a internal.
Unire da Babel Desktop
Per unire assembly con Babel Desktop, segui questi passi:
Apri o crea un progetto
Apri un progetto esistente o creane uno nuovo.
Aggiungi gli assembly
Aggiungi al canvas del progetto l’assembly principale e gli assembly da unire.
Collega le dipendenze
Collega ogni dipendenza all’assembly principale: trascina dall’ancoraggio inferiore della dipendenza all’ancoraggio superiore dell’assembly principale.
Imposta il tipo di collegamento su Unisci
Assicurati che il tipo di collegamento sia Unisci. I nuovi collegamenti selezionano Unisci automaticamente quando l’assembly principale referenzia la dipendenza; altrimenti fai clic sul collegamento e cambiane il tipo.
Configura le opzioni di unione
Seleziona l’assembly principale per configurare nel pannello delle proprietà le opzioni di unione, come Internalize e CopyAttributes nel gruppo Ottimizzazione.
Vedi Progetti di offuscamento per saperne di più sul canvas del progetto.