繁体   English   中英

ManagementObjectSearcher 不包含 Get 的定义

[英]ManagementObjectSearcher does not contain a definition for Get

我试图让这段简单的代码工作。

    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”不包含“Get”的定义,并且找不到接受“ManagementObjectSearcher”类型的第一个参数的扩展方法“Get”(您是否缺少 using 指令或程序集引用?)

怎么来的? 我认为 getter 和 setter 是预定义的。 我还需要参考其他东西吗?

编辑:通过 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。

弄清楚是什么问题了。 我一定是在没有意识到的情况下单击并接受了建议的修复程序之一,这造成了覆盖。 为浪费大家的时间而道歉。

此代码适用于我并正确列出了我的主要驱动器。 我添加了以下使用并添加了对 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”

使用 .NET 4.7.2 构建 .NET 库时遇到同样的问题 通过 nuget https://www.nuget.org/packages/System.Management/安装 System.Management 包解决了该问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM