9
votes

12 Réponses :


0
votes

La manière du .NET de faire cela consiste à installer votre assemblée dans le Global Cache de montage .

chaque ordinateur où le commun L'exécution de la langue est installée a un Code de code machine appelé le Cache de montage global. Le Global Magasins de cache de montage des assemblages spécifiquement désigné à être partagé par plusieurs applications sur le ordinateur.


2 commentaires

N'y a-t-il pas de manière plus simple? Considérant que je partagerai mes fichiers binaires, ce n'est pas très utile.


Considérant que vous n'êtes pas familier avec .net, je suggère "quand à Rome, faire comme les Romains".



2
votes

sans regarder votre code exactement, je reçois cette erreur lorsque je:

  • ne pas avoir les DLL dans le chemin de l'exécutable (pas sur l'endroit où votre SLN réside, mais où la .exe est faite, typiquement dans le bac / débogage ou la bin / x86 / débogage ou quoi que ce soit).
  • Ne pas avoir la signature appropriée de la fonction d'appel (c'est-à-dire que j'ai laissé un paramètre d'entier, les types de retour ne correspondent pas, etc.).
  • je ne suis pas marshalling les types correctement (c'est-à-dire que Bool est marshalé comme un bool, tandis que Bool est désigné comme un entier d'octet unique non signé, etc.) - tandis que ce dernier peut ne pas provoquer l'exception, il peut causer un comportement résolument génial. .
  • am sur une plate-forme 64 bits et appelez une DLL 32 bits. Les tailles de pointeur seront toutes différentes et la DLL va probablement simplement planter et causer cette exception.

    EDIT: Quand tout le reste échoue, essayez Walker de dépendance , car il semble que vos dlls appellent d'autres DLL qui ne sont pas dans votre chemin ni dans le répertoire de l'exécutable.


8 commentaires

J'ai les DLL dans le chemin de la .exe et la fonction est correcte.


Pour votre édition: je suis sûr que les types sont correctement utilisés. Je n'initialise que l'API en utilisant le code par défaut. Et je passe une machine 32 bits avec des DLL 32 bits.


Dépendance Walker, alors, comme je l'ai ajouté. Ça va probablement vous montrer que vous manquez quelque chose.


Non, la DLL qui me manque est Libey32.dll, que j'ai et que dans le système System32 et le dossier EXE.


À droite, mais vous pouvez obtenir cette exception dllnotfound lorsque LibeaY32.dll appelle une autre dll. Walker de dépendance vous montrera ce qui manque, si quelque chose.


Veuillez relire la question, je l'ai modifiée. Vous remarquerez que libey32.dll n'est pas trouvé, pas une de ses dépendances.


Ah, une erreur de configuration côte à côte est différente. Qu'est-ce que OpenSSL compilé et quel compilateur utilisez-vous? Avez-vous les derniers packs de service pour votre compilateur et pour .net?


Je n'ai commencé que d'obtenir des erreurs côte à côte lorsque j'étais sur Vista ou Windows 7, jamais sur XP. Dans quel système d'exploitation vous développez?



1
votes

Votre problème est lié à cette question:

DLLNOTFoundException, mais DLL est là

Vérifiez si toutes les dépencences sont dans le même dossier de votre application ou sont enregistrées.


1 commentaires

J'ai fait. Toujours ne fonctionne pas. Re-lisez la modification s'il vous plaît, si vous ne l'avez pas fait.



1
votes

essayez d'utiliser la sondage. Vous devez créer un fichier de configuration XML désigné comme nom d'exécution exécutable de l'application (ou nommé comme l'assemblage qui requiert votre DLL non géré) avec une extension .config. Par exemple. Si vos applications sont nommées myApp.exe, le fichier de configuration sera nommé myApp.exe.config Le fichier de configuration doit être situé dans le même répertoire que l'exécutable / assemblage.

Le fichier de configuration est un simple fichier XML: xxx

la demande recherchera dans le chemin lors du chargement des assemblages. Le chemin est relatif au fichier de configuration / assemblage.

Je ne sais pas si cela fonctionnera pour les DLL non gérées, mais vaut la peine d'essayer.


0 commentaires

0
votes

En dernier recours, si rien d'autre ne fonctionne:

Il peut être utile de savoir où l'application (.NET ou non) recherche les DLL. Il suffit d'utiliser moniteur de processus et filtrer pour le nom de fichier de la DLL. Puis copiez-le dans un endroit où l'application la recherche.


0 commentaires

0
votes

Vous manquez probablement les redistributables VC ++. Je suppose que OpenSSL.net est uniquement x86, vous pouvez donc Saisissez la version X86 VS2008 Redistributable si elles sont libérées.

Sinon, si ce sont des constructions de débogage (vous verrez Microsoft.vc90.debugcrt dans EventViewer ou les journaux SxStrace), vous aurez besoin de:

  • les reconstruire comme libération
  • Installez ou copiez les redistributables de débogage d'une autre machine
  • Installez Visual C ++ dans Visual Studio (ou, probablement, Visual C ++ Express)

0 commentaires

4
votes

Essayez la dernière version de openssl.net ( 0.4.1 ) qui devrait maintenant inclure des fichiers binaires liboyons32.dll et ssleayy32.dll et ssleay32.dll qui pointent sur le CRT statique. Sinon, vous pouvez construire ces bibliothèques vous-même ou utiliser une construction 'officielle' à partir d'openssl.org.


0 commentaires

0
votes

J'ai trouvé une solution.

Malheureusement, le package redistribuable VS2008 C ++ n'a pas fonctionné - j'ai dû installer la version SP1 et VC ++ 2008. L'auteur a déclaré dans un commentaire sur son site Web qu'il s'agissait d'une erreur de son côté et non de la mienne. Il recompisse actuellement les DLL pour être lié statilement. Merci à tous ceux qui m'ont aidé :)


0 commentaires

0
votes

Essayez de changer la cible de la plate-forme pour votre projet à X86 au lieu de "Toute processeur".


0 commentaires

2
votes

Pour toute personne d'autre, il y a toujours eu cette question (et a vérifié que les conditions préalables nécessaires existent dans leurs bons emplacements:

vérifier le documentation d'installation openssl.net et assurez-vous que ses prérequis sont installés. < / Fort> Dans mon cas, un utilisateur manquait le Microsoft Visual C ++ Package redistribuable 2010 (x86) dépendance appelée dans la documentation OpenSSL.NET.


0 commentaires

0
votes

Dans mon cas, lorsque nous développons un site Web avec Open SSL sur les plates-formes X64 Win 2008, nous devons vérifier au pool d'applications: Autoriser 32 applications: True

Entrez la description de l'image ici


0 commentaires

0
votes

Créer un nouveau dossier nommé X86 dans votre chemin d'application, puis mettre libey32.dll, ssleay32.dll dans le dossier X86.


0 commentaires