【问题标题】:Running Dot Net project exe on Linux which makes use of System.Management to get USB Device information在 Linux 上运行 Dot Net 项目 exe,它利用 System.Management 获取 USB 设备信息
【发布时间】:2013-04-12 22:55:19
【问题描述】:

您好,我在 C# 中创建了一个 Dot Net 应用程序,以使用 System.Management 命名空间获取 USB 设备信息,如 DeviceID、Caption、ClassGUID 等。我正在使用 ManagementObjectSearcher 方法从 Win32_DiskDrive 获取值。它在 Windows 上运行良好。我想在 Linux 机器上运行它。您可以使用 Mono 在 Linux 机器上运行 Dot Net 应用程序。

http://mono-project.com/Main_Page

当我使用 Mono 在 Linux 上运行我的应用程序的 exe 时,我收到以下错误:

    Missing method .ctor in assembly /home/dvimay11/USBCamInfoNew/Debug/System.Management.dll, type System.Reflection.AssemblySignatureKeyAttribute
Can't find custom attr constructor image: /home/dvimay11/USBCamInfoNew/Debug/System.Management.dll mtoken: 0x0a000009

Unhandled Exception: System.TypeLoadException: Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'System.Management'.
  at USBCamInfo.USBInfo.GetUSBDevices () [0x00000] in <filename unknown>:0 
  at USBCamInfo.USBInfo.LoadUSBInfo () [0x00000] in <filename unknown>:0 
  at USBCamInfo.USBInfo..ctor () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) USBCamInfo.USBInfo:.ctor ()
  at USBCamInfo.Program.Main () [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException: Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'System.Management'.
  at USBCamInfo.USBInfo.GetUSBDevices () [0x00000] in <filename unknown>:0 
  at USBCamInfo.USBInfo.LoadUSBInfo () [0x00000] in <filename unknown>:0 
  at USBCamInfo.USBInfo..ctor () [0x00000] in <filename unknown>:0 
  at (wrapper remoting-invoke-with-check) USBCamInfo.USBInfo:.ctor ()
  at USBCamInfo.Program.Main () [0x00000] in <filename unknown>:0

谁能帮我解决这个问题。我想知道如何使用 System.Management 命名空间在 Linux 机器上运行我的 Dot Net exe 来检索 USB 设备的信息

谢谢

【问题讨论】:

  • 这可能在 Mono 上不受支持,因为 Linux(以及可能的其他平台)上的系统管理内容大不相同
  • 有什么方法可以在 Linux 上获取 USB 信息,如 USB ID、设备信息、制造商等,我可以将它集成到我的点网应用程序中。

标签: c# .net linux mono system.management


【解决方案1】:

如果您查看 Mono Project Roadmap,您会发现 System.Management 是特定于 Windows 的,并且没有计划支持它。

您可以改用SharpUsbLib,它支持Linux 下的USB。

【讨论】:

  • 您好,感谢您的回复。有什么办法可以让我运行。在 Linux 上获取 USB 信息的任何其他方式。我可以在我的 Dot Net 应用程序中进行相应的更改并构建它,然后在 Linux 上使用它。
  • 听起来您需要重构一组服务,然后这些服务可以是特定于平台的位来运行(例如,您创建一个 *.services.net 和 *.services.mono 项目,带有 *. services 包含接口的项目)然后在每个实施项目中,适当地进行 IoC 注入。
  • 感谢您的回复理查德。您能否详细说明您向我解释的过程。如果您能帮助我提供任何论坛或博客的链接来解释您向我解释的上述过程,我将非常感谢您。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2013-08-10
  • 2015-06-04
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多