2010-02-15 9 views
6

Vielleicht bin ich etwas fehlt hier offensichtlich aber ....NET Assembly Abhängigkeiten

ich eine wiederverwendbare generischen C# Klassenbibliothek Projekt gebaut haben, sagen (A.dll), die sagen, 3 andere Baugruppen referenziert (B.dll, C .dll und D.dll)

Wenn ich jedoch meine Komponente A.dll in einem anderen Projekt wiederverwenden möchte, muss ich noch die Verweise auf B.dll, C.dll und D.dll einschließen.

Gibt es eine Möglichkeit, A.dll zu konfigurieren, um alle seine Abhängigkeiten in der A.dll zu erstellen, so muss ich die anderen 3 Assemblys nicht enthalten?

Prost

+0

Es gibt wenig Unterschied zwischen dem Versenden von 4 Assemblys oder 1. Und mit separaten Assemblys behalten Sie die gesamte Versionierung/Signierung intakt. –

Antwort

6

Es ist möglich, Baugruppen zu verschmelzen, das Werkzeug ILMerge mit:

C:\Program Files\Microsoft\ILMerge\ILMerge.exe /target:library /out:abcd.dll a.dll b.dll c.dll d.dll" 

Dies wird verschmelzen die dlls a, b, c und d in abcd.dll. Es wird auch die Debugging-Symbole, aber nicht die XML-Dokumentation zusammenführen.

Auch Sie müssen die DLL selbst in neue Projekte und nicht die jeweiligen Projekte verweisen. Eine Ausnahme bilden Bibliotheken, die in eine ausführbare Datei eingebunden werden. In diesem Fall können Sie auf die entsprechenden Bibliotheken/Projekte verweisen, da sie mit der ausführbaren Datei geladen werden.

Das Mono-Projekt hat auch ein Werkzeug dafür, genannt Mkbundle.

Ebenfalls verfügbar ist ILRepack, die mit ILMerge kompatibel sein soll, aber FLOSS ist.

+0

Ja, Sie können es so machen. Aber Sie sollten nicht (im Allgemeinen). –

+0

@Henk Holterman: Warum nicht? – Bobby

+0

Sie versauen Versions- und Signaturinformationen. Für einen wahrgenommenen Gewinn. –

0

Dies wäre so etwas wie statische Verknüpfung von DLLs, die gut mit nativem C++ funktioniert. Soweit ich weiß, können Sie Assemblys in .NET-Code nicht statisch verknüpfen, daher müssen Sie alle DLLs einschließen.

Verwandte Themen