2011-01-09 18 views
6

Desidero importare il file DLL nel progetto del mio sito web. Ho il file dll "my.dll" nella cartella C: \ DLLDir e sto utilizzando il codice:Asp.Net C# DllImport problem

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

Questo funziona bene. Ma voglio usare il percorso relativo (percorso root del sito web). Sto cercando di mettere "my.dll" in "bin" o cartella principale e sto usando il codice:

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

ma sto ottenendo l'errore: Impossibile caricare la DLL 'my.dll' : Il modulo richiesto non può essere trovato. (Eccezione da HRESULT: 0x8007007E)

Qualche idea?

+1

Penso che voglia il percorso assoluto per la DLL. Server.MapPath dovrebbe fare il trucco per te –

+0

Server.MapPath ti fornisce i percorsi relativi alla posizione della tua directory web. Quindi se hai già il percorso assoluto non farà alcuna differenza. –

+1

Ma Server.MapPath consentirà all'OP di utilizzare un percorso relativo alla DLL, ma di passare un percorso assoluto a DLLImport. –

risposta

3

penso che si potrebbe voler controllare il seguente domanda SO prima (dal momento che è legato al tuo caso):

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

Come altre persone ha suggerito, controllare la variabile PATH ambiente per assicurarsi che C:\DLLDir\ è lì. Puoi leggere ulteriori informazioni su come configurare le variabili di ambiente here.

Controlla anche questo MSDN forum post (sembra che ci fosse un problema con le dipendenze).

Se si tratta di una DLL COM che si sta importando, potrebbe anche essere necessario prima registrarsi su un computer di destinazione (anche se non sono sicuro che sia necessario). Read more here.

2

O non hai copiato my.dll nella cartella Bin dove dovrebbe essere caricato. L'utilizzo di Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) mostrerà anche la posizione in cui tenta di caricare questo file.

MODIFICA: grazie a volpav per ricordare che è DLL non gestita - ignora porzione manomessa ... ... l'assembly ha alcune altre dipendenze. Controlla http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx i dettagli dell'investigazione di tali guasti (cerca "assembly load fussion log" per ulteriori collegamenti).

+2

Credo che non abbia nulla a che fare con Fusion poiché è una DLL non gestita. – volpav

0

Credo che la DLL deve essere sul percorso (se non assoluta). E ciò che probabilmente ti sorprenderà è che CWD non è sul tuo cammino a meno che tu non aggiunga specificamente "." nella tua variabile PATH.

2

Passare alla scheda Properties/Build e impostare la destinazione della piattaforma su x86.