Почему? t.NET найти OpenSSL.NET dll?
редактировать (весь вопрос, он был слишком неясен)
Я хочу использовать OpenSSL.NET
OpenSSL.NET страница инструкции по установке:установить
убедитесь, что у вас libeay32.dll и ssleay32.dll в текущей работе каталог вашего приложения или в вашем пути. сделал
В проекте .NET добавьте ссылку на ManagedOpenSsl.сборка dll. сделал
Я поставил libeay32.dll
и ssleay32.dll
и bin/Debug
и bin/Release
справочники. Я также поместил их в system32
.
вот мой полный код:
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();
}
}
}
Я получаю следующую ошибку: не удалось загрузить DLL 'libeay32' http://localhostr.com/files/a719c5/Error.gif (Не удалось загрузить DLL 'libeay32')
вот процесс Журнал монитора (по запросу): alt текст http://localhostr.com/files/726a46/ProcMon.gif
что я делаю не так? Почему не в DLL нашел?
11 ответов
попробуйте последнюю версию OpenSSL.NET (0.4.1), который теперь должен включать prebuilt libeay32.dll и ssleay32.двоичные файлы dll, которые ссылаются на CRT статически. Кроме того, вы можете создать эти библиотеки самостоятельно или использовать "официальную" сборку из openssl.org.
не глядя на ваш код, я получаю эту ошибку, когда я:
- не имеют DLL в пути исполняемого файла (не там, где находится ваш sln, но где .exe выполняется, как правило, в bin / debug или bin / x86 / debug или что-то еще).
- не имеют правильной подписи вызывающей функции (т. е. я оставил целочисленный параметр, возвращаемые типы не совпадают и т. д.).
- Я не сортирую типы должным образом (т. е. BOOL сортируется как bool, хотя bool маршалируется как однобайтовое целое число без знака и т. д.) - Хотя это последнее не может вызвать исключение, оно может вызвать определенно фанк-поведение.
- am на 64-битной платформе и вызываю 32-битную dll. Размеры указателя будут разными, и dll, вероятно, просто произойдет сбой и вызовет это исключение.
EDIT: когда все остальное не удается, попробуйте зависимость walker, потому что похоже, что ваши библиотеки DLL вызывают другие библиотеки, которые не находятся в ваш путь или в каталоге исполняемого файла.
для кого-либо еще там все еще испытывают эту проблему (и проверили, что необходимые предварительные условия существуют в их правильных местах:
Проверьте OpenSSL.NET документация по установке и убедитесь,что установлены необходимые компоненты. в моем случае пользователю не хватало распространяемый пакет Microsoft Visual C++ 2010 (x86) зависимость, которая вызывается в OpenSSL.NET документация.
ваша проблема связана с этим вопрос:
DllNotFoundException, но DLL есть
убедитесь, что все depencencies находятся в одной папке вашего приложения или зарегистрированы.
попробуйте с помощью прощупывания. Необходимо создать XML-файл конфигурации с полным именем исполняемого файла приложения (или с именем сборки, требующей неуправляемой библиотеки dll) с помощью a .расширением config. Е. Г. если приложения это приложение myapp имя.exe, файл конфигурации будет называться myapp.исполняемый.конфиг Файл конфигурации должен находиться в том же каталоге, что и исполняемый файл / сборка .
файл конфигурации представляет собой простой xml-файл:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyuBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="PATH" />
</assemblyuBinding>
</runtime>
</configuration>
теперь приложение будет искать в пути при загрузке сборок. Путь относится к файлу config / assembly.
Не уверен, что он будет работать для неуправляемых библиотек DLL, но стоит попробовать.
.NET способ сделать это-установить сборку в глобальный кэш сборок.
каждый компьютер, где общие установлено среды CLR имеет кэш кода называется глобальный кэш сборок. Мировой кэш сборок хранит сборки специально предназначенные для совместного несколькими приложениями на компьютер.
в крайнем случае, если ничего не работает:
может быть полезно знать, где приложение (.net или нет) ищет библиотеки DLL. Просто используйте Контролировать Процесс и фильтр для имени файла библиотеки DLL. Затем скопируйте его в место, где приложение ищет его.
вероятно, вам не хватает распространяемых файлов VC++. Я предполагаю, что OpenSSL.NET это только для x86, так что вы можете захватите распространяемую версию VS2008 x86 если они выпускают сборки.
в противном случае, если они отладочные сборки (вы увидите Microsoft.VC90.DebugCRT в EventViewer или журналах sxstrace), то вам нужно будет либо:
- перестроить их как release
- установите или скопируйте распространяемые отладочные файлы из другого машина!--8-->
- установите Visual C++ в Visual Studio (или, возможно, Visual C++ Express)
Я нашел решение.
к сожалению, распространяемый пакет VS2008 C++ не работал - мне пришлось установить версию SP1 и VC++2008. Автор сказал в комментарии на своем веб-сайте, что это была ошибка с его стороны, а не моя. В настоящее время он перекомпилирует DLL для статической связи. Спасибо всем, кто помог мне:)
в моем случае, когда мы разрабатываем веб-сайт с открытым ssl на платформах x64 win 2008, мы должны проверить с пулом приложений: разрешить 32 приложения: true