Ошибка - сообщество Visual Studio 2017 с языком C #, использующим zeroMQ, не может найти libzmq или libsodium - PullRequest
0 голосов
/ 15 февраля 2019

Использование VS2017 Community, обновлений, на Win7, обновлений, использование nuget zeroMQ пакета «Install-Package ZeroMQ -Verion 4.1.0.27» для проекта, при создании программы hwclient C # успешно выполняется как форма окна.

При запуске - получите сообщение об ошибке, что zeroMQ.lib не может найти libzmq.dll или что libzmq.dll не является допустимой Windows DLL, а также что libsodium.dll также не может быть найден.Ошибка возникает в файле zeroMQ.dll, когда требуется ZContext.

В проекте используется только пакет nuget ZeroMQ, поэтому НЕ ДОПУСКАЙТЕ доступ к другим ресурсам, иначе какой смысл иметь для него аккуратный пакет nuget (вопрос не в том, как решить проблему с отсутствующей DLL)

using System;
using System.Net;
using System.Windows.Forms;
using ZeroMQ;
namespace InterComm
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            string strHostName = "";
            strHostName = System.Net.Dns.GetHostName();
            IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
            IPAddress[] addr = ipEntry.AddressList;
            lblMyIPString.Text = addr[1].ToString();
        }
        private void btnHello_Click(object sender, EventArgs e)
        {
            string endpoint = "tcp://" + tbTheirIP.Text + ":5555";
            using (var context = new ZContext()) <- ERROR
            {
                using (var requester = new ZSocket(context, SocketType.REQ))
                {
                    requester.Connect(endpoint);
                    for (int n = 0; n < 3; ++n)
                    {
                        string requestText = "Hello";
                        rtbResponse.Text.Insert(0, "Sending... " + requestText);
                        requester.Send(new ZFrame(requestText));
                        using (ZFrame reply = requester.ReceiveFrame())
                        {
                            string resp = reply.ReadString();
                            if (resp.Length == 0)
                            {
                                rtbResponse.Text.Insert(0, "Silence from : "+ lblTheirIP.Text); 
                            }
                                else
                            {
                                rtbResponse.Text.Insert(0, "Received: " + reply.ReadString());
                            }
                        }
                    }
                }
            }
        }
    }
}

и, наконец,

InterComm.exe Warning: 0 : UnmanagedLibrary[libsodium] Unable to extract the 
EmbeddedResource "ZeroMQ.libsodium.i386.dll" to 
"C:\Users\techuser\AppData\Local\Temp\ZeroMQ.libsodium.i386.dll".
InterComm.exe Warning: 0 : UnmanagedLibrary[libzmq] Unable to extract the EmbeddedResource "ZeroMQ.libzmq.i386.dll" to "C:\Users\techuser\AppData\Local\Temp\ZeroMQ.libzmq.i386.dll".
Exception thrown: 'System.TypeInitializationException' in ZeroMQ.dll
An unhandled exception of type 'System.TypeInitializationException' occurred in ZeroMQ.dll
The type initializer for 'ZeroMQ.lib.zmq' threw an exception.
...