Подтвердить что ты не робот

ZeroMQ DllNotFoundException с использованием .Net Bindings

Я только начинаю использовать ZeroMQ и экспериментирую с некоторыми образцами. Я использую привязки языка С# и столкнулся с проблемой получения исключения DllNotFound.

Я могу загружать и запускать образцы на моей машине разработки после копирования libzmq.dll в Windows/System32, но когда я перемещаю вещи на другие серверы, я получаю ошибку, несмотря на то, что копирование libzmq.dll в обе папки, запуск из Windows и System32 в Windows и System32.

Я поместил clzmq.dll в папку, в которой находится образец приложения, а также libzmq.dll. Также я поставил libzmq в c:/Windows/System32. Я запускаю Windows Server 2003 с пакетом обновления 2 (SP2). Когда я проверяю переменные среды машины, WINDOWS/System32 находится в переменной PATH. Я также решил построить libzmq dll с помощью Release, а не отлаживать.

Возможно, я не понимаю, как следует использовать привязку ZeroMQ.Net. Я добавил clzmq.dll(.Net Binding) в свой проект как ссылку, и я предположил, что clzmq.dll автоматически ссылается на libzmq на переменную Windows PATH WINDOWS/System32.

Кто-нибудь знает, ошибаюсь ли я на этом. Документация по связыванию с С# (http://www.zeromq.org/bindings:clr) гласит, что "файл библиотеки ZeroMQ должен быть доступен для привязки к работе", но он швов. Я не смог сделать это доступным, несмотря на то, что он копировал его в переменную PATH.

Кто-нибудь сталкивался с тем, что DLL не обнаружило исключение при использовании привязок ZeroMQ.Net?

Спасибо за помощь,

4b9b3361

Ответ 1

Я столкнулся с этой точной ошибкой в ​​Windows Server 2008. Как только мой код попытался создать объект clrzmq (2.2.3), Windows попыталась загрузить DLL и не удалось с ошибкой:

Unable to load DLL 'libzmq': The specified module could not be found.

DLL наиболее определенно присутствует. Я попытался найти множество решений с разрешениями, которые не смогли решить проблему. Загрузка и установка распространяемого VS2010 С++ распространяемого решения решила мою проблему.

Ответ 2

У меня все еще такая же проблема после того, как я проверил, что моя система имеет распространяемый Microsoft Visual С++ 2010. Моя ОС - Windows 7 64 бит. Я получил библиотеку ZeroMQ из NuGet в Visual Studio 2010.

PS, я нашел решение для решения моей ошибки. При загрузке ZeroMQ из NuGet в VS, на самом деле есть предупреждение, которое я проигнорировал сначала. В нем говорится, чтобы вручную скопировать libzmq.dll в выходной каталог проекта, кроме ссылки clrzmq2. После того как вручную скопируйте libzmq.dll в выходной каталог, он работает сейчас. Кстати, я попытался скопировать libzmq.dll в C:\Windows\System32, как упоминалось выше, это тоже не сработало.

Надеюсь, что это поможет.

Ответ 3

Если вы используете пакет NuGet ZeroMQ и получаете сообщение об ошибке:

Unable to load DLL 'libzmq'

Перейдите в Solution Explorer и убедитесь, что пакет NuGet добавил вам папки amd64 и i386. Разверните эти папки, выберите каждый файл внутри них, затем перейдите в окно "Свойства" и выберите "Копировать, если новый" для "Копировать в каталог вывода".

Это, по-видимому, самое элегантное решение проблемы и работает для обеих архитектур автоматически. Windows будет искать текущий путь + i386/amd64 на основе архитектуры.