2010-01-19 9 views
7

Ich habe C++ DLL in meinem C# -Projekt verwenden, lief es gut auf meinem Fenster XP-Maschine, aber wenn ich mein Debug-Projekt auf Fenster 2003 Server (x64) kopieren, erhielt ich Fehler unten, kann mir jemand sagen, was ist das Problem, und wie kann ich es beheben.System.DllNotFoundException: DLL konnte nicht auf Fenster 2003 geladen werden

Dank

„System.DllNotFoundException: Kann DLL‚lib.dll‘laden: Diese Anwendung ist fehlgeschlagen, weil die Anwendungskonfiguration falsch ist, starten Sie die Anwendung neu installieren dieses Problem beheben kann.“

+0

Ist 'lib.dll' im Anwendungsverzeichnis vorhanden? – leppie

+0

ja, es ist, aber der Fehler ist immer noch..so jemand weiß, wie zu beheben..ich fühle mich sehr frustriert ... – Rick

+1

Ist lib.dll in debug als auch gebaut? Es kann versuchen, eine Verbindung mit der Debug-C++ - Laufzeit herzustellen, die nicht installiert wird, wenn Visual Studio nicht auf dem Windows 2003-Computer installiert ist. – shf301

Antwort

6

Für DLL laden Problem, ich schlage vor, Sie verwenden das Dependency Walker Werkzeug. Es hat sich im Umgang mit solchen Problemen als wertvoll erwiesen, da es Ihnen das genaue Problem zeigt.

Wenn Sie Visual Studio 2005 besitzen, können Sie es in C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe finden.

Update:

MSVCR90D.DLL ist die Debug-Version des Visual C++ Runtime 9.0. Es sollte nur zum Debuggen verwendet werden. Ich empfehle dringend, eine Release-Version Ihrer Bibliothek zu erstellen, um das DLL-Ladeproblem zu vermeiden. Wenn Sie jedoch unbedingt die Debug-Version bereitstellen müssen, finden Sie alle erforderlichen DLLs in C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86.

+0

Danke! Deine Antwort hat mir einfach sehr geholfen. Dependency Walker hat direkt zur Wurzel des Problems geführt. – vfilby

+0

Das ist das Ticket. Ich habe mich seit einer Woche mit unity3d mit diesem Thema beschäftigt. –

11

Es beschwert sich, dass es Probleme hat, die CRT-DLLs zu finden. Überprüfen Sie zuerst, dass die DLL das erforderliche Manifest enthält. Wählen Sie in Visual Studio Datei + Öffnen + Datei die DLL aus, und vergewissern Sie sich, dass sie einen RT_MANIFEST-Knoten enthält. Das nächste Problem besteht darin, dass Sie einen Debug-Build Ihrer DLL nicht bereitstellen können. Es wird eine Abhängigkeit von der Debug-Version des CRT haben, die Sie auf dem Zielcomputer nicht installieren können.

Implementieren Sie entweder das Release-Build Ihrer DLL oder kompilieren Sie die DLL mit der Option/MT, sodass die CRT statisch verknüpft ist. Projekt + Eigenschaften, C/C++, Codegenerierung, Laufzeitbibliothek. Dies funktioniert nicht, wenn die DLL mit der Option/clr kompiliert wurde.

1

klingt wie Sie die visuelle C++ Laufzeit auf dem Zielcomputer nicht installiert haben. Sie können das von here installieren Da es scheint, dass die Debug-Versionen dieser DLLs verwenden, müssen Sie vielleicht auch Ihre App im Freigabemodus zuerst erstellen? This post und this one haben einige andere Vorschläge, die helfen könnten ...

2

Ist lib.dll eine 32-Bit-DLL? Ihr C# -Programm wird nativ auf x64 ausgeführt, kann jedoch keine 32-Bit-DLLs laden. Sie können versuchen, die Ziel-CPU des C# -Projekts auf "x86" zu ändern, um die Ausführung unter WOW64 zu erzwingen.

Verwandte Themen