2011-01-09 15 views
6

Ich möchte DLL-Datei in meinem Website-Projekt importieren. Ich habe DLL-Datei "my.dll" im Verzeichnis C: \ DLLDir und ich bin mit dem Code:Asp.Net C# DllImport Problem

[DllImport("C:\\DLLDir\\my.dll", EntryPoint = "Out32")] 

Dies funktioniert ok. Aber ich möchte relativen Pfad (Website-Stammpfad) verwenden. Ich versuche, „my.dll“ in „ist“ oder Stammordner zu setzen, und ich bin mit dem Code:

[DllImport("my.dll", EntryPoint = "Out32")] 

aber ich erhalte die Fehlermeldung: Kann nicht DLL ‚my.dll‘ laden : Das ausgewählte Module kann nicht gefunden werden. (Ausnahme von HRESULT: 0x8007007E)

Irgendwelche Ideen?

+1

Ich denke, dass es den absoluten Pfad zur DLL wollen. Server.MapPath sollte den Trick für Sie ausführen –

+0

Server.MapPath gibt Ihnen die Pfade relativ zu Ihrem Webverzeichnispfad. Also, wenn Sie den absoluten Pfad bereits haben, wird es keinen Unterschied machen. –

+1

Aber Server.MapPath erlaubt dem OP, einen relativen Pfad zur DLL zu verwenden, aber einen absoluten Pfad zu DLLImport zu übergeben. –

Antwort

3

Ich glaube, Sie können die folgende Frage SO zunächst prüfen wollen (da es zu einem Fall in engem Zusammenhang steht):

DllImport failed to locate DLL even though it is in the PATH

Wie andere Menschen hat vorgeschlagen, überprüfen Sie die PATH Umgebungsvariable, um sicherzustellen, dass C:\DLLDir\ ist da. Sie können mehr darüber lesen, wie Sie Ihre Umgebungsvariablen konfigurieren können here.

Überprüfen Sie auch diese MSDN forum post (scheint, gab es ein Problem mit Abhängigkeiten).

Wenn es sich um eine COM-DLL handelt, die importiert werden soll, muss sie möglicherweise auch zuerst auf einem Zielcomputer registriert werden (obwohl ich nicht sicher bin, ob dies erforderlich ist). Read more here.

2

Entweder Sie haben meine.dll nicht in den Ordner Bin kopiert, wo sie geladen werden soll. Using Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) wird zeigen, wo es versucht, diese Datei zu laden.

EDIT: Danke an volpav für die Erinnerung, dass es nicht verwaltet DLL - ignorierte manged Teil ... ... Assembly haben einige andere Abhängigkeiten. Überprüfen Sie http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx, die Details Untersuchung solcher Fehler (Suche nach "Assembly Load fussion log" für weitere Links).

+2

Ich glaube, es hat nichts mit Fusion zu tun, da es unmanaged DLL ist. – volpav

0

Ich glaube, die DLL muss auf Ihrem Weg sein (wenn nicht absolut). Und was Sie wahrscheinlich überraschen wird, ist, dass CWD nicht auf Ihrem Weg ist, wenn Sie nicht ausdrücklich "." in Ihrer PATH-Variable.

2

Wechseln Sie zur Registerkarte Properties/Build, und legen Sie das Platform-Ziel auf fest.