我正在尝试使这段简单的代码起作用。
public void GetHDDSerial()
{
var hdd = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index = '0'")
.Get()
.Cast<ManagementObject>()
.First();
MessageBox.Show(hdd["Model"].ToString());
}
using System.Management
存在,并且我还对该程序集进行了引用(Visual Studio>项目>添加引用> System.Management)。
我得到的错误是未定义Get()方法。具体来说:
错误CS1061'ManagementObjectSearcher'不包含定义 对于“获取”,没有扩展方法“获取”接受第一个参数 可以找到“ ManagementObjectSearcher”类型(您是否缺少 使用指令还是程序集引用?)
为什么?我认为吸气剂和吸气剂是预先定义的。我还需要引用其他内容吗?
编辑:浏览ManagementObjectSearcher,并列出所有实际存在的方法,然后得到以下方法:ToString
,Equals
,GetHashCode
, GetType
。
编辑#2 :转到定义(F12,或单击鼠标右键),我得到:
namespace myProgram
{
internal class ManagementObjectSearcher
{
private string v;
public ManagementObjectSearcher(string v)
{
this.v = v;
}
}
}
.NET版本是4.6.01055,我正在使用Visual Studio 2015 Enterprise。
答案 0 :(得分:1)
找出问题所在。我必须单击并接受其中一个建议的修补程序,但没有意识到,它创建了一个替代。抱歉浪费大家的时间。
答案 1 :(得分:0)
此代码对我有用,并正确列出了我的主驱动器。我添加了以下用法,并添加了对System.Management和System.Management.Instrumentation的引用。应该适用于.NET 4.6.1。
using System;
using System.Linq;
using System.Management;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var hdd = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index = '0'")
.Get()
.Cast<ManagementObject>()
.First();
Console.WriteLine(hdd["Model"].ToString());
Console.Read();
}
}
}
示例输出:“三星SSD 840 EVO 250GB”
答案 2 :(得分:0)
在使用.NET 4.7.2构建.NET库时遇到了相同的问题 通过nuget安装System.Management软件包解决了该问题 https://www.nuget.org/packages/System.Management/