Использование LibUsbDotNet для приложения ASP.NET Core, работающего под Linux - библиотека libusb-1.0 не найдена

Я разработал приложение ASP.NET Core, которое предполагает связь с USB-устройством. Для этого используется версия 2.2.8-r101 библиотеки CoreCompat.LibUsbDotNet, которая является портом LibUsbDotNet и предназначена для.NET Standard 1.5.

Когда я размещаю сервер в Windows (используя IIS Express), все работает нормально - я могу общаться с USB-устройством без проблем. Однако я также попытался разместить сервер на двух устройствах Linux:

  • виртуальная машина VMware под управлением Ubuntu 16.04
  • контейнер докера, созданный на основе официального образа докера ASP.NET Core (microsoft/aspnetcore:1.0.1)

В обоих этих случаях мой сервер запускается успешно, но когда я пытаюсь инициировать связь с USB-устройством (нажав кнопку "Пуск" на веб-странице), я вижу следующую ошибку, отображаемую в консоли браузера:

[09:57:03 GMT+0100 (GMT Standard Time)] SignalR: communicationshub.StartComms failed to execute. Error: libusb-1.0 library not found.  This is often an indication that libusb-1.0 was installed to '/usr/local/lib' and mono.net is not looking for it there. To resolve this, add the path '/usr/local/lib' to '/etc/ld.so.conf' and run 'ldconfig' as root. (http://www.mono-project.com/DllNotFoundException)

В обоих случаях я настраиваю устройства Linux, используя следующий набор команд:

$ apt-get update && apt-get install -y libusb-1.0-0-dev usbutils

В случае с док-контейнером я запускаю его в привилегированном режиме, и с этим и с машиной VMware я вижу, что мое USB-устройство подключено с использованием lsusb,

Я также смог общаться с этим устройством как в Windows, так и в Linux, используя ранее созданные приложения для.NET Framework и LibUsbDotNet версии 2.2.8 (в случае Linux это было сделано путем компиляции в Windows с копированием двоичных файлов). на виртуальную машину Linux и работает с mono).

Это вывод моего запущенного Docker-контейнера после установки libusb:

root@fdf333675857:/app# apt-cache search libusb
libusbhid-common - Common files for the USB HID devices FreeBSD library
libhidapi-libusb0 - Multi-Platform library for communication with HID devices (libusb backend)
libhidapi-libusb0-dbg - Debugging symbols for libhidapi-libusb0
libdevice-usb-perl - Perl module to access USB devices using libusb
libgusb-dev - GLib wrapper around libusb1 - development files
libgusb-doc - GLib wrapper around libusb1 - documentation
libgusb2 - GLib wrapper around libusb1
libusb++-0.1-4c2 - userspace C++ USB programming library
libusb++-dev - userspace C++ USB programming library development files
libusb-0.1-4 - userspace USB programming library
libusb-dev - userspace USB programming library development files
libusb-1.0-0 - userspace USB programming library
libusb-1.0-0-dbg - userspace USB programming library development files
libusb-1.0-0-dev - userspace USB programming library development files
libusb-1.0-doc - documentation for userspace USB programming
libusb-java - Java wrapper for libusb
libusb-java-dbg - debug information for libusb java wrapper
libusb-java-doc - javadoc documentation for libusb-java
libusb-java-lib - C part of Java wrapper for libusb
libusbmuxd-dev - USB multiplexor daemon for iPhone and iPod Touch devices - devel
libusbmuxd-tools - USB multiplexor daemon for iPhone and iPod Touch devices - tools
libusbmuxd2 - USB multiplexor daemon for iPhone and iPod Touch devices - library
libusbmuxd2-dbg - USB multiplexor daemon for iPhone and iPod Touch devices - debug
libusbtc08-1 - Hardware interface library for PicoTech USB TC08 Thermocouple sensor
libusbtc08-dev - Development files for PicoTech USB TC08
libusbip-dev - USB device sharing system over IP network (development files)
libusb-ocaml - OCaml bindings to libusb-1.0 (runtime)
libusb-ocaml-dev - OCaml bindings to libusb-1.0
libusbprog-dev - Development files for libusbprog
libusbprog0 - Library for programming the USBprog hardware
libusbredirhost-dev - implementing the usb-host (*) side of a usbredir connection (development)
libusbredirhost1 - Implementing the usb-host (*) side of a usbredir connection (runtime)
libusbredirparser-dev - Parser for the usbredir protocol (development)
libusbredirparser1 - Parser for the usbredir protocol (runtime)
python-usbtc08 - Python wrapper for libusbtc08

whereis:

root@fdf333675857:/app# whereis libusb-1.0
libusb-1: /usr/include/libusb-1.0

/lib:

root@fdf333675857:/app# ls -la /lib
total 36
drwxr-xr-x 11 root root 4096 Sep 30 09:00 .
drwxr-xr-x 48 root root 4096 Sep 30 09:01 ..
drwxr-xr-x  2 root root 4096 Sep 23 17:25 init
drwxr-xr-x  3 root root 4096 Sep 23 17:25 lsb
drwxr-xr-x  2 root root 4096 Sep 23 17:25 startpar
drwxr-xr-x  8 root root 4096 Sep 23 17:25 systemd
drwxr-xr-x 15 root root 4096 Sep 17  2014 terminfo
drwxr-xr-x  4 root root 4096 Sep 23 17:26 udev
drwxr-xr-x  3 root root 4096 Sep 30 09:00 x86_64-linux-gnu

/usr/lib:

root@fdf333675857:/app# ls -la /usr/lib
total 92
drwxr-xr-x 24 root root 4096 Sep 30 09:00 .
drwxr-xr-x 24 root root 4096 Sep 30 09:00 ..
drwxr-xr-x  4 root root 4096 Sep 23 17:26 apt
drwxr-xr-x  2 root root 4096 Sep  2 22:02 binfmt.d
drwxr-xr-x  2 root root 4096 Sep 23 17:25 coreutils
drwxr-xr-x  3 root root 4096 Sep 23 17:26 dpkg
drwxr-xr-x  3 root root 4096 Dec 19  2014 gcc
drwxr-xr-x  2 root root 4096 Sep 23 17:26 gnupg
drwxr-xr-x  3 root root 4096 Sep  5 06:10 locale
drwxr-xr-x  3 root root 4096 Jun  6  2013 mime
drwxr-xr-x  2 root root 4096 Sep  2 22:02 modules-load.d
-rw-r--r--  1 root root  232 Sep 12 04:09 os-release
drwxr-xr-x  2 root root 4096 Aug 15  2014 perl5
drwxr-xr-x  3 root root 4096 Mar 19  2015 python2.7
drwxr-xr-x  3 root root 4096 Mar 19  2015 python3
drwxr-xr-x  2 root root 4096 Sep 25  2015 sasl2
drwxr-xr-x  3 root root 4096 Sep 29 22:14 ssl
drwxr-xr-x  2 root root 4096 Sep  2 22:02 sysctl.d
drwxr-xr-x  7 root root 4096 Sep  2 22:02 systemd
drwxr-xr-x  2 root root 4096 Nov  8  2014 tar
drwxr-xr-x  2 root root 4096 Sep 23 17:26 tc
drwxr-xr-x  2 root root 4096 Sep 23 17:25 tmpfiles.d
drwxr-xr-x 10 root root 4096 Sep 30 09:00 x86_64-linux-gnu

/usr/local/lib:

root@fdf333675857:/app# ls -la /usr/local/lib
total 8
drwxrwsr-x  2 root staff 4096 Sep 23 17:25 .
drwxrwsr-x 11 root staff 4096 Sep 29 22:13 ..

Обновление 1

Вот мой project.json:

{
  "version": "0.1.1-*",
  "description": "Provides a testbed for validating the behaviour of <<Company>> .NET Communication Services",
  "authors": [
    "<<Author>>"
  ],
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true,
    "debugType": "portable"
  },
  "dependencies": {
    "<<Company>>.Communications.Core": "0.4.3",
    "<<Company>>.Communications.<<Product>>Usb": "0.4.6",
    "BundlerMinifier.Core": "2.2.281",
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.1",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.1",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Routing": "1.0.1",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
    "Microsoft.AspNetCore.SignalR.Server": "0.1.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.AspNetCore.WebSockets.Server": "0.1.0",
    "Microsoft.Composition": "1.0.30",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.NETCore.App": {
      "version": "1.0.1",
      "type": "platform"
    },
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "System.Reactive": "3.1.0-rc"
  },
  "packOptions": {
    "owners": [
      "<<Company>>"
    ],
    "repository": {
      "type": "git",
      "url": "https://bitbucket.org/<<Company>>-dev/communications-testbed"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },
  "publishOptions": {
    "include": [
      "wwwroot",
      "**/*.cshtml",
      "appsettings.json",
      "web.config",
      "docker-compose.yml",
      "Dockerfile",
      ".dockerignore"
    ]
  },
  "runtimeOptions": {
    "configProperties": {
      "System.GC.Server": true
    }
  },
  "scripts": {
    "prepublish": [
      "bower install",
      "dotnet bundle"
    ],
    "postpublish": [
      "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
    ]
  },
  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
  }
}

Идея этого приложения заключается в том, что оно служит в качестве испытательного стенда службы связи, который будет сканировать его зависимости для экспорта MEF ICommunicationService и позволить им быть проверенными. Это означает, что он напрямую не использует LibUsbDotNet, а вместо этого ссылается на проект, который делает. Это project.json для этого:

{
  "version": "0.4.6-*",
  "description": "Provides a type of communication service that facilitates communication between .NET applications and <<Product>> over USB.",
  "authors": ["<<Author>>],

  "dependencies": {
    "NETStandard.Library": "1.6.0",
    "Microsoft.Composition": "1.0.30",
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1-rc2-24027",
    "<<Company>>.Message": "0.4.2",
    "<<Company>>.Communications.Core": "0.4.3",
    "Thrower": "3.0.4",
    "CoreCompat.LibUsbDotNet": "2.2.8-r101",
    "Common.Logging.Portable": "3.3.1"
  },
  "packOptions": {
    "owners": ["<<Company>>"],
    "repository": {
      "type": "git",
      "url": "https://bitbucket.org/<<Company>>-dev/<<Product>>usb"
    }
  },
  "frameworks": {
    "netstandard1.6": {
      "imports": [ "dnxcore50", "portable-net45+win8" ]
    }
  },
  "buildOptions": {
    "xmlDoc": true
  }
}

0 ответов

Другие вопросы по тегам