Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在Dot Net Core中使用System.Management.dll_C#_Asp.net Core_.net Core - Fatal编程技术网

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.