2008-10-27 8 views
11

Ich verwende eine 3rd Party API, die in 2 DLLs definiert ist. Ich habe diese DLLs in mein Projekt aufgenommen und Verweise darauf gesetzt. So weit, ist es gut.C#: Wie man abhängige DLLs einbaut?

Diese DLLs haben jedoch mindestens eine abhängige DLL, die zur Laufzeit nicht gefunden werden kann. Ich habe die fehlende DLL in das Projekt kopiert und das Flag 'Copy to output' gesetzt, aber ohne Erfolg.

Was soll ich hier tun, um dem Projekt mitzuteilen, wo es die abhängige DLL finden soll?

Erläuterung Ich habe versucht, einen Verweis auf die fehlende DLL hinzuzufügen, aber es wurde nicht als eine .Net-Komponente erkannt. In meiner Verzweiflung habe ich es direkt zum Ausgabeordner hinzugefügt, aber ohne Erfolg.

Schließlich habe ich die API auf dem PC installiert und es hat alles funktioniert. Die Installation setzt die Variable PATH und die DLL befindet sich im Installationsordner. Aber wie kann ich dem Projekt mitteilen, in einem seiner internen Ordner nachzusehen?

+0

Wenn Sie sagen, dass Sie "die fehlende DLL in das Projekt kopiert haben" - meinen Sie, dass Sie eine Referenz hinzugefügt oder die Datei einfach kopiert haben? Es ist wahrscheinlich am besten, eine Referenz hinzuzufügen. –

Antwort

2

Es klingt, als ob Sie die Drittanbieterbibliothek besser verstehen müssen und wie sie ihre eigenen Abhängigkeiten verwendet. Wenn die Installation der API das Problem löst, aber die Dateien manuell nicht kopieren, dann fehlt etwas. Es gibt entweder eine fehlende Datei oder eine Umgebungsvariable oder einen Registrierungseintrag, der benötigt wird. Zwei Dinge, die Ihnen dabei helfen werden, sind das Werkzeug depends (das Teil der C++ - Installation ist) und procmon, das Ihnen alle Registrierungsschlüssel und Dateien mitteilt, die zur Laufzeit verwendet werden.

Wenn Sie Glück haben, ist es nur eine Datei, die Sie vermissen. Wenn das alles ist, können Sie den Abschnitt "Build Events" des Projekts verwenden, um die benötigten Dateien bei einem erfolgreichen Build an die richtige Position zu kopieren. Wenn nicht, müssen Sie dies auf andere Weise lösen - entweder indem Sie die API installieren oder Ihr eigenes Installationsprojekt ausführen.

0

Wie implementieren Sie? Nur flache Dateien? Wenn dies der Fall ist, sollte es so lange funktionieren, wie die Datei im Ausgabeverzeichnis des Projekts landet. Macht es?

Wenn Sie eine andere Bereitstellung verwenden, müssen Sie diese Engine anweisen, sie aufzunehmen. Dies ist für jeden von msi/ClickOnce/etc unterschiedlich.

0

Sie können die Downstream-Abhängigkeiten entweder langsam als Referenzen auf Ihr Projekt hinzufügen. Dies ist umständlich und etwas zerbrechlich

Oder Sie könnten ein Tool wie "Depends.exe" von Microsoft verwenden, um Ihre Top-Level-Baugruppen zu überprüfen und eine Referenzliste zu den Abhängigkeiten zu erhalten.