Beispiel, wie mehrere Module und Link Thema in einer einzigen DLL erstellen:
csc /t:module RarelyUsedTypes.cs
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs
Weitere Informationen finden Sie Richters Buch CLR via C#.
Sie können diesen Prozess für Visual Studio automatisieren.
Erstellen Sie für jedes Ihrer Projekte ein Netmodul oder eine Assembly und kompilieren/fusionieren Sie alle zu einer einzigen Assembly.
Erste Alternative. Dies wurde von Jay R. Wren vorgeschlagen:
Dies ist ein netter Hack, aber mit dem CSC und VBC sowohl der Unterstützung der /target:module
und /addmodule
Optionen, könnten Sie eigentlich diese nur ohne ILMerge tun, indem Sie einen Shell-Skript verwenden oder Datei erstellen.
Visual Studio unterstützt den Typ "netmodule" nicht, MSBuild jedoch.
Fügen Sie Ihrer Lösung das VB-Projekt hinzu. Entladen Sie das Projekt und bearbeiten Sie die Projektdatei.
ändern Output Modul:
<OutputType>module</OutputType>
Statt einen Verweis auf das gewünschte Projekt hinzufügen, fügen wir ein Modul. Leider schlägt VStudio hier fehl, aber MSBUILD funktioniert gut. Entladen Sie das Projekt und bearbeiten Sie die Projektdatei. Fügen Sie eine Elementgruppe mit AddModules include-Direktiven hinzu.
<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>
Dieses msbuild sagen wird CSC sagen /addmodule
Richtlinien zu verwenden, ebenso wie die Referenzelementgruppe, das Studio verwalten hat.
Hauptnachteil: Kein Visual Studio Intellisense für das hinzugefügte Modul. Wir haben bereits Referenzen, es ist schade, dass wir keine Module haben.
[UPDATE: Wie @ Ark-Kun wies darauf hin, kann Visual Studio .netmodule
Projekte und Intellisense verweisen. Fügen Sie einfach die Projektreferenz hinzu, BEVOR Sie den Ausgabetyp ändern.]
SharpDevelop hat den ersten Schritt, aber der zweite Schritt, eine "Add Module" GUI, wurde seit SD 2.0 als niedriger Priorität geöffnet.
Zweite Alternative. Diese great article (von Scott Hanselman) beschreibt, wie Assemblys automatisch gruppiert werden, wenn Sie Visual Studio verwenden.Es tut geben Sie IntelliSense-Unterstützung
, im Gegensatz zur ersten Alternative
.
Netmodule sind das Gegenteil. Ich wurde auch von ihnen getäuscht. Netmodules ermöglichen es Ihnen, die Assembly in mehrere Dateien aufzuteilen (zB um sie separat zu laden). Sie sind den normalen referenzierten DLLs sehr ähnlich. Als Link-Status können Sie mit netmodules eine "multifile assembly" erstellen. –