ManagementObjectSearcher не содержит определения для Get - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь заставить этот простой кусок кода работать.

    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> Project> AddСсылка> System.Management).

Ошибка, которую я получаю, заключается в том, что метод Get () не определен.В частности:

Ошибка CS1061 «ManagementObjectSearcher» не содержит определения для «Get», а метод расширения «Get» не может быть найден, принимающий первый аргумент типа «ManagementObjectSearcher» (вы пропускаете использованиедиректива или ссылка на сборку?)

Как получилось?Я думал, что геттеры и сеттеры были предопределены.Нужно ли ссылаться на что-нибудь еще?

EDIT : Проходя через 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.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Разобрался, в чем проблема.Должно быть, я нажал и принял одно из предложенных исправлений, не понимая, что создало переопределение.Извиняюсь за трату времени каждого.

0 голосов
/ 26 января 2019

Этот код работает для меня и правильно перечисляет мой основной диск.Я добавил следующие варианты использования и добавил ссылки на 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();

        }
    }
}

Пример вывода: "Samsung SSD 840 EVO 250GB"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...