Entwickler-Ecke
Basistechnologien - Externe DLL in Projekt kompilieren
pascalsv - Mi 10.09.08 09:06
Titel: Externe DLL in Projekt kompilieren
Hallo zusammen,
für mein Dll-Projekt nutze ich eine externe Dll. Wenn ich das Projekt nun kompiliere, erhalte ich "meine" dll und die externe dazu.
Ist es möglich, die externe dll im Projekt so einzubauen, dass als Build-Ergebnis nur "meine" dll erzeugt wird, die die externe dll beinhaltet?
Danke,
Pascal
Th69 - Mi 10.09.08 09:25
Nein, statische Libraries (wie mit C/C++) sind mit C# bzw. NET nicht möglich.
Du müßtest schon den Source-Code der externen Library direkt in deine DLL einbinden.
pascalsv - Mi 10.09.08 17:01
Hi,
danke für die eindeutige Antwort. Ich habe nun das Problem, in welches Verzeichnis diese zweite dll hingehört. Scheinbar wird sie im gleichen Verzeichnis wie die "erste" dll mit dem Hauptprogramm nicht erkannt. Was nun? Eine Ablage in c:\windows\system fände ich nicht besonders elegant.
Pascal
Kha - Mi 10.09.08 17:18
pascalsv hat folgendes geschrieben: |
Scheinbar wird sie im gleichen Verzeichnis wie die "erste" dll mit dem Hauptprogramm nicht erkannt. |
Das sollte eigentlich auf jeden Fall funktionieren. Zum Debuggen kannst du den
FUSIONLOGVW benutzen.
Th69 hat folgendes geschrieben: |
Nein, statische Libraries (wie mit C/C++) sind mit C# bzw. NET nicht möglich. |
Zur Not gibt es immer noch
ILMERGE ;) .
pascalsv - Mi 10.09.08 17:53
Hi Sebastian,
danke für die Links. Eine weitere Software will ich nicht verwenden. Allerdings komme ich mit Assembly noch nicht so klar.
Hier mein bisheriges Coding:
C#-Quelltext
1: 2: 3: 4: 5: 6:
| Assembly SampleAssembly; SampleAssembly = Assembly.LoadFrom(@"C:\...\Addins\pommes.dll"); MethodInfo Method = SampleAssembly.GetTypes()[0].GetMethod("Method1"); ParameterInfo[] Params = Method.GetParameters(); |
Ich referenziere bisher ja den Namespace der dll mit "using". Wie mache ich das hier? Ausserdem brauche ich den Zugriff auf sämtliche Variablen und Methoden der dll. Wie erreiche ich das? Und dann am besten so, dass ich sie möglichst einfach im Code aufrufen kann?
Danke,
Pascal
Kha - Do 11.09.08 12:28
Warum willst du denn die Assembly dynamisch einbinden? Normalerweise einfach das andere Projekt in "Referenzen" hinzufügen, das wars.
pascalsv - Do 11.09.08 12:51
Ja, aber das geht nicht. Die dll wird zwar in das gleiche Verzeichnis gelegt wie die dll des Programms, aber nicht gefunden. Ich erhalte:
"Could not load file or assembly"...
Ich habe die dll in c:\windows\system kopiert aber auch das hilft nichts...
Kha - Do 11.09.08 15:48
Dazu kann ich dir nicht mehr sagen als beim letzten Mal: Das sollte auf jeden Fall funktionieren. Und Fuslogvw.exe (so heißt das Ding richtig) ist kein 3rd-Party-Tool, sondern Bestandteil des SDKs.
pascalsv - Do 11.09.08 16:17
Komisch, ich habe die Datei Fuslogvw.exe gar nicht, obwohl ich sowohl NET2.0 als auch NET3.5 installiert habe. Wo sollte die Datei zu finden sein?
Kann ich sie irgendwo runterladen?
Danke,
Pascal
pascalsv - Fr 12.09.08 10:03
Bei VS2008 ist sie wohl nicht dabei.
Ich bekomme definitiv eine System.IO.FileNotFoundException. Leider ist die ganze Sache schwer zu debuggen. Wie kann ich denn den verwendeten Pfad auslesen?
Rufe ich ein
C#-Quelltext
1: 2:
| Assembly SampleAssembly; SampleAssembly = Assembly.LoadFrom(@"C:\Program Files\...\myCommon.dll"); |
auf, findet er die dll einwandfrei, obwohl der Pfad auf das Verzeichnis mit der Programm-DLL zeigt.
:nixweiss:
pascalsv - Fr 12.09.08 13:24
OK,
nehmen wir den Fall, ich müßte die dll manuell zur Laufzeit einbinden. Wie mache ich das am geschicktesten? Ich nutze ja schon den Namespace und die Methoden zur Entwicklungszeit...
Danke,
Pascal
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!