Почему.NET не находит OpenSSL.NET dll?

Мм, жаль, чтобы быть педантом, но это уже завоевало популярность - мы называем его Excel.

http://research.microsoft.com/en-us/um/people/simonpj/papers/excel/

подавляющее большинство программ, которые работают на компьютерах, записано в Excel или одном из многих популярных клонов его.

(существует много программ, которые много раз запускаются, и программы, записанные в Excel, имеют тенденцию НЕ быть их - большинство программ Excel имеет 1 выполненный экземпляр)

9
задан Lazlo 8 September 2009 в 21:25
поделиться

9 ответов

Попробуйте последнюю версию OpenSSL.NET ( 0.4.1 ), которая теперь должна включать предварительно собранный libeay32.dll и двоичные файлы ssleay32.dll, которые статически связываются с CRT. Кроме того, вы можете собрать эти библиотеки самостоятельно или использовать «официальную» сборку с openssl.org.

4
ответ дан 4 December 2019 в 21:10
поделиться

Вероятно, вам не хватает распространяемых файлов VC ++. Я предполагаю, что OpenSSL.NET - это только x86, поэтому вы можете получить распространяемую версию VS2008 x86 , если они являются сборками релиза.

В противном случае, если это отладочные сборки (вы увидите Microsoft.VC90.DebugCRT в EventViewer или в журналах sxstrace), вам потребуется либо:

  • Перестроить их как выпуск.
  • Установить или скопировать отладка распространяемых файлов с другой машины
  • Установите Visual C ++ в Visual Studio (или, возможно, в Visual C ++ Express)
0
ответ дан 4 December 2019 в 21:10
поделиться

В крайнем случае, если ничего не работает:

Может быть полезно узнать, где приложение (.net или нет) ищет библиотеки DLL. Просто используйте Process Monitor и отфильтруйте имя файла DLL. Затем скопируйте его в место, где приложение его ищет.

0
ответ дан 4 December 2019 в 21:10
поделиться

Попробуйте использовать зондирование. Вам необходимо создать файл конфигурации XML, названный как полное имя исполняемого файла приложения (или названный как сборка, которая требует вашу неуправляемую dll) с расширением .config. Например, если ваше приложение называется myapp.exe, файл конфигурации будет называться myapp.exe.config. Файл конфигурации должен находиться в том же каталоге, что и исполняемый файл / сборка.

Файл конфигурации представляет собой простой файл xml:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyuBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="PATH" />
    </assemblyuBinding>
  </runtime>
</configuration>

Теперь приложение будет искать в PATH при загрузке сборок. ПУТЬ относится к файлу конфигурации / сборки.

Не уверен, будет ли он работать с неуправляемыми dll, но попробовать стоит.

1
ответ дан 4 December 2019 в 21:10
поделиться

Не глядя в точности на ваш код, я получаю эту ошибку, когда у I:

  • нет dll на пути к исполняемому файлу (не там, где находится ваш sln, а где .exe выполняется, как правило, в bin / debug или bin / x86 / debug или в другом).
  • не имеют правильной сигнатуры вызывающей функции (т. е. я пропустил целочисленный параметр, возвращаемые типы не совпадают и т. д.
  • я не собираю типы должным образом (т. Е. BOOL маршалируется как bool, а bool маршалируется как однобайтовое целое число без знака и т. Д.) - хотя последнее из них может не вызывать исключения, оно может явно вызвать напуганное поведение.
  • Я использую 64-битную платформу и вызываю 32-битную dll. Размеры указателей будут разными, и DLL, вероятно, просто выйдет из строя и вызовет это исключение.

РЕДАКТИРОВАТЬ: Когда все остальное не удается,

2
ответ дан 4 December 2019 в 21:10
поделиться

.NET способ сделать это - установить вашу сборку в глобальный кэш сборок .

Каждый компьютер, на котором установлен общий установленная языковая среда имеет машинный кеш кода, называемый глобальный кеш сборок. Глобальный кэш сборок хранит сборки специально предназначенный для совместного использования несколькими приложениями на компьютер.

0
ответ дан 4 December 2019 в 21:10
поделиться

Ваша проблема связана с этим вопросом:

DllNotFoundException, но есть DLL

Убедитесь, что все зависимости находятся в той же папке вашего приложения или зарегистрированы.

1
ответ дан 4 December 2019 в 21:10
поделиться

Я нашел решение.

К сожалению, распространяемый пакет VS2008 C ++ не работал - мне пришлось установить версию SP1 И VC ++ 2008. Автор сказал в комментарии на своем сайте, что это была ошибка с его стороны, а не моей. В настоящее время он перекомпилирует библиотеки DLL для статической компоновки. Спасибо всем, кто мне помогал :)

0
ответ дан 4 December 2019 в 21:10
поделиться

Попробуйте изменить целевой объект платформы для вашего проекта на x86 вместо «любой процессор».

0
ответ дан 4 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: