如果System.Management.dll
与 Dot Net Core 不兼容,我应该如何收集硬件信息。
如何获取处理器ID,磁盘卷数等机器信息。
答案 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