C# Ich möchte nur EINE dll Datei einbinden

-Rayz-

Lieutenant
Registriert
Okt. 2010
Beiträge
904
Hallo,

ich habe ein dll Datei geschrieben welche wiederum auch dll Dateien beinhaltet. Auf manche konnte ich verweisen, andere konnte ich nur als Ressource einbinden.
Das Ziel war eigentlich am Ende nur eine einzige Datei zu haben. Allerdings geht das wohl gar nicht so einfach. Wenn ich meine dll in ein externes Programm einbinde, muss ich manuell alle notwendigen dll's in das Hauptverzeichnis kopieren.
Muss ich wirklich einen Ordner erstellen, alle nötigen dll Dateien dort reinkopieren, diese dann fest mit meiner dll verbinden, und anschließend zippen oder gibt es irgendeine elegantere Variante?
Eine Installationsroutine nur für eine dll empfinde ich eigentlich auch für etwas übertrieben..

MfG Rayz
 
DLLs kannst du nicht "zippen". Entweder du schreibst eine einzige DLL indem du deine Sub DLLs statisch dazulinkst bei der Kompilierung deiner Haupt DLL, oder du lieferst eben deine 20 verschiedenen DLLs mit. Ohne Zip Archiv.
 
Das gezippte muss natürlich dann wieder extrahiert werden. Ich wollte halt nur eine Datei.
Wie gesagt habe ich es via Verweis und via Einbindung als Ressource probiert. Meinst du also, ich soll die Dateien mit "Import" einbinden?
 
Kann es sein, dass du mit "nur einer Datei" die .exe meinst? Falls ja, dann kannst du Ressourcen in die .exe einbetten. Ressource im Projektmappen-Explorer selektieren. Dann jeweils in den Eigenschaften der Ressourcen bei Buildvorgang eingebettete Ressource auswählen.

Dann musst du im Code allerdings anders darauf zugreifen. Z.B. so wie hier mit einer eingebetteten XML-Datei:
Code:
Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("DeinProjekt.Resources.ImpFields.xml");
//hier geht es dann speziell weiter
XmlReader reader = XmlReader.Create(stream);
XElement rootElem = XElement.Load(reader);

Aber sag erst mal, ob du das überhaupt meinst :)
 
ne ich meine keine .exe
in meiner dll nutze ich opvencv welches ja auch wieder dll Dateien benötigt. Hätte halt alles gerne in meiner erstellen dll Datei drin damit im externen Programm nur ein Verweis auf meine dll gemacht werden muss und opencv dennoch verwendet werden kann ohne dieses extra einbinden zu müssen.
 
Wenn alle DLLs .Net wären, müsste ich diese doch via Verweis einbinden können oder?
Wenn ich das versuche, kommt die Nachricht, dass es sich um keine gültige COM-Komponente oder Assembly handelt.
 
-Rayz- schrieb:
Wenn ich das versuche, kommt die Nachricht, dass es sich um keine gültige COM-Komponente oder Assembly handelt.
Dann hast du wohl eine native DLL dabei. ILMerge ist dann keine Option.

Statisch Linken geht in C# nicht, deshalb ist es in der .NET-Welt völlig normal evtl. nötige DLLs zu kopieren. Größere Projekt werden sowieso per Build-Server gebaut, der das automatisch macht.
Theoretisch könnte man die DLLs in die Ressourcen der "Haupt-DLL" packen und dort beim Laden der DLL extrahieren und dynamisch nachladen. Das ist aber weder einfach, noch besonders performant und meiner Meinung nicht wirklich sinnvoll.

Wenn du Lust hast beschäftige dich mit NuGet. Wenn nicht, ist ein ZIP-Archiv meiner Meinung nach eine völlig akzeptable Lösung.
 
Lust ja, Zeit gerade nicht soviel bzw. liegen die Prioritäten woanders in dem Projekt.
Dann werde ich es vorerst mit einem ZIP-Archiv lösen.

Danke :)
 
Zurück
Oben