Pourquoi ne le fait pas .NET trouver l'OpenSSL.NET dll?
MODIFIER (l'ensemble de la question, il était trop incertaine)
Je veux utiliser OpenSSL.NET
L'OpenSSL.NET des instructions d'installation de la page: INSTALLER
Assurez-vous que vous avez libeay32.dll et ssleay32.dll dans le travail actuel
répertoire de votre application ou dans votre CHEMIN. FAIT
Dans votre .NET de projet, ajouter une référence à la ManagedOpenSsl.dll de l'assemblée. FAIT
J'ai mis libeay32.dll
et ssleay32.dll
dans mon bin/Debug
et bin/Release
répertoires. J'ai aussi les mettre dans system32
.
Voici mon code COMPLET:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
OpenSSL.Crypto.RSA rsa = new OpenSSL.Crypto.RSA();
}
catch (Exception e)
{
Console.WriteLine(e.InnerException.Message);
}
Console.Read();
}
}
}
J'obtiens l'erreur suivante:
Impossible de charger la DLL 'libeay32' http://localhostr.com/files/a719c5/Error.gif
(Impossible de charger la DLL 'libeay32')
Ici est le Processus de Surveiller les journaux (sur demande):
le texte d'alt http://localhostr.com/files/726a46/ProcMon.gif
Ce que je fais mal? Pourquoi n'est-ce pas la DLL trouvé?
Est-ce votre système 64 bits? Et, plus important encore, est votre .NET application AnyCPU ou x86?
Mon système est en 32 bits, et je ne sais pas comment vérifier les autres paramètres.
Avez-vous essayez d'exécuter l'sxstrace.exe outil tel que suggéré dans le message d'erreur ?
OriginalL'auteur Lazlo | 2009-09-08
Vous devez vous connecter pour publier un commentaire.
Essayer la dernière version de OpenSSL.NET (0.4.1) qui doit maintenant inclure prêts à l'emploi libeay32.dll et ssleay32.dll les binaires lien avec le CRT de manière statique. Alternativement, vous pouvez construire ces bibliothèques vous-même ou utiliser une "officielle" de construire à partir de openssl.org.
OriginalL'auteur fried
Sans regarder ton code, j'obtiens cette erreur quand j':
EDIT: Quand tout le reste échoue, essayez dependency walker, car il semble que votre dll sont l'appel à d'autres dll qui ne sont pas dans votre chemin d'accès ou dans le répertoire de l'exécutable.
Pour ton edit: je suis sûr que les types sont utilisés correctement. Je ne suis que de l'initialisation de l'API en utilisant le code par défaut. Et je suis en cours d'exécution d'une machine 32 bits avec 32-bit dll.
Dependency walker, puis, comme je l'ai ajouté dans. Elle va probablement vous montrer qu'il vous manque quelque chose.
Non, la dll, je suis absent est libeay32.dll que j'ai et qui est à la fois dans le system32 et le dossier exe.
Droit, mais vous pouvez obtenir que dllnotfound exception lors de l'libeay32.dll les appels de certains autres dll. Dependency walker va vous montrer ce qu'il manque, si quoi que ce soit.
OriginalL'auteur mmr
Pour quelqu'un d'autre là-bas encore confronté à ce problème (et avoir vérifié que les conditions préalables nécessaires existent dans leurs emplacements corrects:
Vérifier la OpenSSL.NET documentation d'installation et de s'assurer que ses composants requis sont installés. Dans mon cas, un utilisateur manquait le Microsoft Visual C++ 2010 Redistributable Package (x86) dépendance qui est appelé dans le OpenSSL.NET de la documentation.
OriginalL'auteur Evan Wondrasek
Votre problème est lié à cette question:
DllNotFoundException, mais DLL est-il
Vérifier si tous les depencencies sont dans le même dossier de votre application ou sont inscrits.
OriginalL'auteur Cleiton
Essayez d'utiliser de sondage. Vous devez créer un fichier de configuration XML nommé comme l'exécutable de l'application nom complet (nom ou l'assemblée qui requiert votre non-géré dll) avec une .config extension. E. g. si vos applications est le nom 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 le fichier exécutable /l'assemblée .
Le fichier de configuration est un fichier xml simple:
Maintenant l'application recherche dans le CHEMIN d'accès lors du chargement des assemblées. Le CHEMIN est relatif au répertoire config /fichier d'assemblage.
Ne sais pas si cela fonctionne pour les non-géré dll, mais il vaut la peine de l'essayer.
OriginalL'auteur Ricardo Amores
L' .NET façon de le faire est d'installer votre assemblée dans le global assembly cache.
Considérant que vous n'êtes pas familier avec .NET, je suggère de "when in Rome, fais comme les Romains".
OriginalL'auteur Andrew Hare
Comme un dernier recours, si rien ne fonctionne:
Il peut être utile de savoir où l'application (.net ou pas) est à la recherche de la Dll. Utilisez simplement Le Moniteur De Processus et le filtre pour le nom de fichier de la DLL. Puis copiez-le dans un endroit où la demande est à la recherche pour elle.
OriginalL'auteur Peter Hahndorf
Vous êtes probablement manquant de VC++ transmissibles. Je suis en supposant que OpenSSL.NET est x86 uniquement, de sorte que vous pouvez prenez le VS2008 version x86 redistribuable si ils sont à la release.
Si, au contraire, ils sont les versions de débogage (vous verrez par Microsoft.VC90.DebugCRT dans EventViewer ou la sxstrace journaux), alors vous aurez besoin de:
OriginalL'auteur Mark Brackett
J'ai trouvé une solution.
Malheureusement, le VS2008 C++ Redistributable package n'a pas de travail, j'ai dû installer la version SP1 ET VC++2008. L'auteur dit dans un commentaire sur son site que c'était une erreur de sa part, et non la mienne. Il est actuellement en recompilant les Dll à être lié statiquement. Merci à tous ceux qui m'ont aidé 🙂
OriginalL'auteur Lazlo
Essayez de changer la Plate-forme cible pour votre projet x86 au lieu de "any cpu".
OriginalL'auteur rvo
Dans mon cas, lorsque l'on développe un site web avec open ssl sur x64 win 2008 plates-formes, nous devons vérifier avec l'application de la piscine : permettre aux 32 applications : vrai
OriginalL'auteur Frano Hartman
Créer un Nouveau Dossier Nommé x86 dans votre chemin de l'application, puis mis libeay32.dll,ssleay32.dll dans le dossier x86.
OriginalL'auteur DEVYANG SATHAVARA