C# 无法在Dot Net Core中使用System.Management.dll
如果C# 无法在Dot Net Core中使用System.Management.dll,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,如果System.Management.dll与Dot-Net-Core不兼容,我应该如何收集硬件信息 如何获取计算机信息,如处理器Id、磁盘卷号等。我目前正在移植一个Net Framework项目,该项目使用System.Management获取一些硬件信息,而且由于System.Management与Net Core不兼容,我也陷入了死胡同 我找到的解决方法是使用进程。从系统启动。诊断执行powershell命令以获取该信息,例如,要获取主板序列号,可以使用命令获取WmiObject Win
System.Management.dll
与Dot-Net-Core不兼容,我应该如何收集硬件信息
如何获取计算机信息,如处理器Id、磁盘卷号等。我目前正在移植一个Net Framework项目,该项目使用
System.Management
获取一些硬件信息,而且由于System.Management
与Net Core不兼容,我也陷入了死胡同
我找到的解决方法是使用进程。从系统启动。诊断
执行powershell命令以获取该信息,例如,要获取主板序列号,可以使用命令获取WmiObject Win32|U基板|选择序列号
,然后,您可以更改命令以处理输出,并且只具有序列号,甚至可以通过编程方式处理输出
您还可以添加一些ifs
,这取决于您可以提供给进程的当前操作系统。启动特定的操作系统命令,例如,对于linux,您需要处理与dmidecode相关的命令
这种方法唯一的缺点是,与System.Management
相比,它的速度要慢得多。NET Core 3现在支持System.Management。此时,.NET Core 3处于预览模式,预览4是最新版本
您必须在Visual Studio中的“项目”菜单下选择“管理NuGet软件包…”菜单项才能安装最新版本的System.Management
。确保选中“包括预览”复选框,以便安装最新版本
早期版本的System.Management
抛出错误:
“无法使用[Out]属性按值封送字符串…”
有关此错误的详细信息,请参阅。我在从.NetFramework升级到.NetCore 3.0时发现此问题
.NetFramework兼容System.Management不适用于dotnet core,因此要解决此问题,只需添加一个与.Net core兼容的System.Management nuget
此时,最新的可用版本是4.6.0,最新的预览版本是4.7.0-preview3.19551.4您需要在.Net核心项目中安装Microsoft.Windows.Compatibility
,以便能够引用System.Management.dll
猜测您必须定义与之交互的机器,然后尝试调用本机调用此类信息(win机器的PInvokes)。为了解决这个问题,我在新项目中安装了一个nuget包,但它不识别名称空间。不能使用类。显示构建错误目前不可能,我在他们的回购协议上制造了一个问题,最近有一些活动。这是跟踪您的问题系统的线索。管理仍然不是跨平台的。它可以在Windows环境下工作,但不能在unix环境下工作。Net核心版本:这仍然是2020年在不同平台上工作时的最佳解决方案,这是一个遗憾Process.Start
CLI,具体取决于您正在运行的操作系统,分析重定向输出中的结果,并根据需要返回结果和进程。是否安装Microsoft.Windows.Compatibility?和Nuget软件包?Nuget软件包和Microsoft.Windows.Compatibility?5.0.0-使用Nuget 3.x时,此软件包至少需要版本3.4.