ManagementObjectSearcher不包含Get的定义

时间:2019-01-26 10:38:59

标签: c# winforms

我正在尝试使这段简单的代码起作用。

    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,并列出所有实际存在的方法,然后得到以下方法:ToStringEqualsGetHashCodeGetType

编辑#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。

3 个答案:

答案 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/