Skip to Content
Neue Version 12 verfügbar 🎉

Assembly-Zusammenführung

Sie können Assemblys mit dem Befehlszeilentool babel, der MSBuild-Aufgabe Babel oder Babel Desktop zusammenführen.

Avalonia-Anwendungen können nicht zusammengeführt werden. Avalonia kompiliert den XAML-Code jeder Assembly in assemblyspezifische CompiledAvaloniaXaml-Typen und ein einzelnes !AvaloniaResources-Blob und löst Assets über avares://<AssemblyName>/…-URIs auf, deren Schlüssel die Identität der Assembly ist. Beim Zusammenführen der Assemblys, die XAML enthalten, kollidieren diese Typen und Ressourcen, und die avares://-Auflösung schlägt zur Laufzeit fehl. Um eine Avalonia-Anwendung als einzelne Datei auszuliefern, verwenden Sie stattdessen die Assembly-Einbettung, die die Identität jeder Assembly erhält.

Über die Befehlszeile zusammenführen

Mit dem Tool babel führen Sie Assemblys zusammen, indem Sie die Ziel-Assembly angeben, gefolgt von der Liste der Assembly-Dateien, die mit der primären Assembly zusammengeführt werden, sowie weiteren Konfigurationsoptionen:

babel <primary assembly source> [<other assemblies>...] [options]

Babel Obfuscator bietet mehrere Optionen, um die Assembly-Zusammenführung zu konfigurieren.

—[no]copyattrs [regex]

Mit dieser Option legen Sie fest, ob Babel Attribute auf Assemblyebene in die primäre Assembly kopiert. Optional können Sie einen regulären Ausdruck angeben, der dem vollständigen Namen der Attribute entspricht, die zusammengeführt werden sollen. Sie können --copyattrs mehrfach angeben, um mehrere Attributfilter festzulegen. Um das Kopieren von Attributen auf Assemblyebene auszuschalten, geben Sie --nocopyattrs an.

Wenn Attribute auf Assemblyebene kopiert werden, können Sie mit XML-Regeln filtern, welche Attribute kopiert oder ausgeschlossen werden. Dazu dienen die Eigenschaften CopyAttributes und NoCopyAttributes, die einen regulären Ausdruck für den vollständigen Typnamen des Attributs auf Assemblyebene erwarten:

<Rule name="merge attributes" feature="merge" exclude="false"> <Target>Assembly</Target> <Pattern>*</Pattern> <Properties> <NoCopyAttributes>.*TypeLibVersion</NoCopyAttributes> </Properties> </Rule>

Der Filterausdruck CopyAttributes nimmt Attribute auf Assemblyebene anhand des vollqualifizierten Namens ihres Attributtyps gezielt in die zusammengeführte Assembly auf. Nur die Attribute, die dem Filterausdruck entsprechen, werden also in die Ziel-Assembly zusammengeführt, alle anderen werden ausgeschlossen.

Der Filterausdruck NoCopyAttributes schließt dagegen Attribute auf Assemblyebene anhand des vollqualifizierten Namens ihres Attributtyps gezielt von der zusammengeführten Assembly aus. Alle Attribute, die dem Filterausdruck entsprechen, werden also nicht in die Ziel-Assembly zusammengeführt, alle anderen werden aufgenommen.

—[no]internalize:

Wenn die Option eingeschaltet ist, ändert sie die Sichtbarkeit aller Typen der zusammengeführten Assemblys von public in internal.

Die geänderte Sichtbarkeit kann verhindern, dass zusammengeführte Typen außerhalb der primären Assembly verwendet werden. Schalten Sie diese Option daher nur ein, wenn die zusammengeführten Typen ausschließlich von der primären Assembly verwendet werden sollen.

Mit der MSBuild-Aufgabe Babel zusammenführen

Um Assemblys mit der Babel-Aufgabe zusammenzuführen, definieren Sie in der MSBuild-Projektdatei ein zusätzliches Element ItemGroup. Diese ItemGroup enthält alle Assemblys, die Sie mit der primären Assembly zusammenführen möchten. Die Aufgabe Babel verwendet diese ItemGroup, um die Zusammenführung während des Builds durchzuführen.

Das folgende Beispiel zeigt, wie Sie das Element ItemGroup definieren:

<ItemGroup> <MergeAssembly Include="path/to/assembly1.dll"/> <MergeAssembly Include="path/to/assembly2.dll"/> </ItemGroup>

In diesem Beispiel sind path/to/assembly1.dll und path/to/assembly2.dll die Pfade der Assemblys, die Sie mit der primären Assembly zusammenführen möchten. Sie können beliebig viele Assemblys in die ItemGroup aufnehmen.

Nachdem Sie die ItemGroup definiert haben, übergeben Sie sie der Aufgabe Babel mit dem Parameter MergeAssemblies:

<Babel MergeAssemblies="@(MergeAssembly)" Internalize="true" />

Das Attribut Internalize legt fest, ob die Sichtbarkeit der zusammengeführten Typen von public in internal geändert wird.

In Babel Desktop zusammenführen

Um Assemblys mit Babel Desktop zusammenzuführen, gehen Sie so vor:

Projekt öffnen oder anlegen

Öffnen Sie ein vorhandenes Projekt oder legen Sie ein neues an.

Assemblys hinzufügen

Fügen Sie die primäre Assembly und die zusammenzuführenden Assemblys der Zeichenfläche des Projekts hinzu.

Abhängigkeiten verbinden

Verbinden Sie jede Abhängigkeit mit der primären Assembly: Ziehen Sie vom unteren Anker der Abhängigkeit zum oberen Anker der primären Assembly.

Verbindungstyp auf „Zusammenführen“ setzen

Stellen Sie sicher, dass der Verbindungstyp Zusammenführen ist. Neue Verbindungen erhalten automatisch den Typ Zusammenführen, wenn die primäre Assembly die Abhängigkeit referenziert. Andernfalls klicken Sie auf die Verbindung und ändern ihren Typ.

Optionen der Zusammenführung konfigurieren

Wählen Sie die primäre Assembly aus, um im Eigenschaftenbereich die Optionen der Zusammenführung zu konfigurieren, etwa Internalize und CopyAttributes in der Gruppe „Optimierung“.

Mehr zur Zeichenfläche des Projekts finden Sie unter Verschleierungsprojekte.

Last updated on