无法在Dot Net Core中使用System.Management.dll

时间:2016-11-12 20:59:40

标签: c# asp.net-core .net-core

如果System.Management.dll Dot Net Core 不兼容,我应该如何收集硬件信息。

如何获取处理器ID,磁盘卷数等机器信息。

4 个答案:

答案 0 :(得分:3)

我目前正在移植一个使用System.Management来获取硬件信息的Net Framework项目,而且由于System.Management与Net Core不兼容,我也陷入了死胡同。

我找到的解决方法是使用Process.Start中的System.Diagnostics执行powershell命令来获取该信息,例如,获取主板序列号,您可以使用命令Get-WmiObject Win32_BaseBoard | select SerialNumber,然后,您可以更改命令以处理输出,只有序列号,甚至以编程方式处理输出。

您还可以添加一些ifs,这取决于您可以提供给Process.Start特定操作系统命令的当前操作系统,例如,对于Linux,您需要处理与dmidecode相关的命令。 / p>

这种方法唯一不利的一面是它的A LOT SLOWER与System.Management相比较。

答案 1 :(得分:1)

您需要在.Net核心项目中安装Microsoft.Windows.Compatibility才能引用System.Management.dll

答案 2 :(得分:0)

.NET Core 3现在支持System.Management。截至目前,.NET Core 3处于预览模式,其中预览4为最新版本。

您必须在Visual Studio的“项目”菜单下选择“ 管理NuGet软件包... ”菜单项,才能安装最新版本的System.Management。确保选中包括预览复选框,以便您安装最新版本。

以前版本的System.Management引发错误:

“无法通过[Out]属性封送按字符串值...”

有关该错误的更多信息,请参见this link

答案 3 :(得分:0)

从.NetFramework升级到.NetCore 3.0时,我发现了这个问题

  

.NetFramework兼容的System.Management不适用于dotnet核心,因此要解决此问题,只需添加一个.Net核心兼容的System.Management nuget。

目前,最新的可用版本是4.6.0 https://www.nuget.org/packages/System.Management/4.6.0,最新的预览版本是4.7.0-preview3.19551.4