7
votes

ASP.NET C # DLLIMPORT problème

Je veux importer un fichier DLL dans mon projet de site Web. J'ai dll fichier "my.dll" dans le dossier C: \ dlldrir et j'utilise le code: xxx

Cela fonctionne bien. Mais je veux utiliser un chemin relatif (chemin racine de site Web). J'essaie de mettre "my.dll" dans "bin" ou dossier racine et j'utilise le code: xxx

mais je reçois l'erreur: impossible charger dll 'my.dll': le module spécifié n'a pas pu être trouvé. (Exception de HRESULT: 0x8007007E)

Des idées?


7 commentaires

Je pense que cela veut la voie absolue à la DLL. Serveur.mappath devrait faire le tour pour vous


Server.Mappath vous donne les chemins par rapport à votre lieu de répertoire Web. Donc, si vous avez déjà le chemin absolu, cela ne fera aucune différence.


Mais Server.Mappath permettra à OP d'utiliser un chemin relatif de la DLL, mais de passer une voie absolue à Dllimport.


Eggheadcafe.com/software/aspnet/33238643/... Vous pouvez mettre votre DLL à System32 ou votre variable de chemin


My.dll a-t-il des dépendances? Si oui, avez-vous copié ces dépendances sur le répertoire bin sites Web aussi?


@Aaron les mettre dans la poubelle ne fonctionne pas. Le problème est qu'il a besoin de placer la DLL non gérée dans C: \ Windows \ Microsoft.net \ Framework \ V2.0.50727 \ Fichiers temporaires ASP.NET \ XXXX. Il n'y a pas de moyen facile de le faire car le chemin est généré de manière dynamique. Le moyen le plus simple consiste simplement à placer la DLL dans un chemin connu ou à mettre à jour la variable du chemin


@HARVEY - Je ne suis pas un gourou interop en quelque sorte cependant, j'ai créé une application Web C # et une DLL simple C ++ avec une fonction exportée. J'ai copié la DLL C ++ dans le répertoire des applications Web et je suis capable d'appeler la fonction exportée simplement en utilisant Dllimport sans passer à l'aide du chemin complet ou de la mise à jour de la variable d'environnement de chemin.


4 Réponses :


2
votes

soit vous n'avez pas copié mon fichier bin où il devrait être chargé. Utilisation de Process Explorer ( http://technet.microsoft.com/en-us/sysinternals /bbb89665.cox ) Willley Show où il essaie de charger ce fichier.

Edit: Merci à Volpav pour vous rappeler qu'il est non géré DLL - Ignorer la partie mangée ... ... L'assemblée a des autres dépendances. Découvrez http://blogs.msdn.com/b /suzcook/archive/2003/05/29/57120.aspx qui détaille l'enquête de ces échecs (recherche du journal de fussion de la charge de l'assemblage "pour plus de liens).


1 commentaires

Je crois que cela n'a rien à voir avec la fusion car sa dll non gérée.



0
votes

Je crois que la DLL doit être sur votre chemin (sinon absolu). Et qu'est-ce qui va probablement vous surprendre, c'est que CWD n'est pas sur votre chemin à moins que vous ajoutez spécifiquement "". dans votre variable de chemin.


0 commentaires

3
votes

Je pense que vous voudrez peut-être vérifier la question suivante pour la question (puisqu'elle est liée à votre cas):

Dllimport n'a pas réussi à localiser la DLL Même si c'est dans le chemin

Au fur et à mesure que d'autres personnes a suggéré, cochez la variable chemin pour vous assurer que c: \ dlldrir \ est là. Vous pouvez en savoir plus sur la manière de configurer vos variables d'environnement ici .

Regardez cette MSDN Forum Post également (on dirait qu'il y avait un problème avec des dépendances).

Si c'est une DLL COM, vous importation, il peut également nécessiter d'être enregistré d'abord sur une machine cible (bien que je ne sois pas sûr si cela est nécessaire). En savoir plus ici .


0 commentaires

2
votes

aller à Propriétés / Build onglet et définissez la cible de la plate-forme sur x86 .


0 commentaires