12 Stimmen

C#: Wie kann man abhängige DLLs einbinden?

Ich verwende eine API eines Drittanbieters, die in 2 DLLs definiert ist. Ich habe diese DLLs in mein Projekt aufgenommen und Verweise auf sie gesetzt. So weit, so gut.

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 "Zur Ausgabe kopieren" gesetzt, aber ohne Erfolg.

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

Klärung Ich habe versucht, einen Verweis auf die fehlende DLL hinzuzufügen, da sie jedoch nicht als .Net-Komponente erkannt wurde. In meiner Verzweiflung fügte ich sie direkt in den Ausgabeordner ein, aber ohne Erfolg.

Schließlich habe ich die API auf dem PC installiert, und alles hat funktioniert. Bei der Installation wird die PATH-Variable gesetzt und die DLL wird im Installationsordner gefunden. Aber wie kann man das Projekt anweisen, in einem seiner internen Ordner zu suchen?

2voto

dpurrington Punkte 1480

Es hört sich so an, als ob Sie die Bibliothek eines Drittanbieters besser verstehen müssten und wie sie ihre eigenen Abhängigkeiten verwendet. Wenn die Installation der API das Problem löst, das manuelle Kopieren der Dateien aber nicht, dann haben Sie etwas übersehen. Entweder fehlt eine Datei oder eine Umgebungsvariable oder ein Eintrag in der Registrierung, der erforderlich ist. Zwei Dinge, die Ihnen dabei wirklich helfen werden, sind das depends-Tool (das Teil der C++-Installation ist) und procmon, das Ihnen alle Registrierungsschlüssel und -dateien anzeigt, die zur Laufzeit verwendet werden.

Wenn Sie Glück haben, ist es nur eine Datei, die Ihnen fehlt. Wenn das alles ist, können Sie den Abschnitt "Build Events" des Projekts verwenden, um die benötigten Dateien bei einem erfolgreichen Build an den richtigen Ort zu kopieren. Wenn nicht, müssen Sie das Problem auf andere Weise lösen - entweder indem Sie die Installation der API verlangen oder indem Sie ein eigenes Installationsprojekt erstellen.

0voto

Marc Gravell Punkte 970173

Wie werden Sie eingesetzt? Nur flache Dateien? Wenn ja, sollte es funktionieren, solange die Datei im Ausgabeverzeichnis des Projekts landet. Tut es das?

Wenn Sie eine andere Bereitstellung verwenden, müssen Sie dieser Engine mitteilen, dass sie es einschließen soll. Dies ist für jede msi/ClickOnce/etc. anders.

0voto

Jay Mooney Punkte 2088

Sie können die nachgelagerten Abhängigkeiten entweder langsam als Referenzen zu Ihrem Projekt hinzufügen. Dies ist umständlich und etwas anfällig

Oder Sie können ein Tool wie "Depends.exe" von Microsoft verwenden, um Ihre Top-Level-Assemblies zu untersuchen und eine Referenzliste der Abhängigkeiten zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X