C# System.Management имеет только 1 класс?

Я пытался использовать WMI для своего кода, я не могу использовать классы System.Management, поскольку их там нет. Я пробовал это на 3,5 и 4 сети. Ничего не работает Я не нашел каких-либо решений этой проблемы, и мне было интересно, сталкивался ли кто-нибудь из вас с этим? Если так, то почему у меня только есть:

System.Management.Instrumentation

мой using блок ниже:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Management;
using System.IO;
using System.Security.Permissions;
using Microsoft.Win32;
using System.Collections;
using System.Management.Instrumentation;

Информация:

Visual Studio 2010 Ultimate, использующий сеть 3.5 - сеть 4.

Не уверен, что мне здесь не хватает.

5 ответов

System.Management.Instrumentation это не класс, это пространство имен. Учитывая ваши директивы using, если у вас есть ссылка на System.Management.dll, вы сможете написать такой код:

ObjectQuery query = new ObjectQuery("...");

MSDN перечисляет довольно много классов под System.Management.Instrumentation Пространство имен:

Класс DefaultManagementInstaller
Класс DefaultManagementProjectInstaller
Интерфейс IEvent IgnoreMemberAttribute Class
Интерфейс
Класс экземпляра
InstanceNotFoundException Class
Инструментарий Класс
InstrumentationBaseException Class
InstrumentationClassAttribute Class
InstrumentationException Class
Класс InstrumentationManager
Перечисление InstrumentationType
InstrumentedAttribute Class
Класс ManagedCommonProvider
Класс ManagedNameAttribute
Класс ManagementBindAttribute
ManagementCommitAttribute Class
Класс ManagementConfigurationAttribute
Перечисление ManagementConfigurationType
ManagementCreateAttribute Class
Класс ManagementEntityAttribute
Класс ManagementEnumeratorAttribute
Перечисление ManagementHostingModel
Класс ManagementInstaller
ManagementKeyAttribute Class
Класс ManagementMemberAttribute
Класс ManagementNameAttribute
Класс ManagementNewInstanceAttribute
Класс ManagementProbeAttribute
ManagementQualifierAttribute Class
ManagementQualifierFlavors Перечисление
Класс ManagementReferenceAttribute
ManagementRemoveAttribute Class
ManagementTaskAttribute Class
Класс WmiConfigurationAttribute
WmiProviderInstallationException Class

Они живут в System.Management.dll - убедитесь, что вы добавили ссылку на него.

Вы добавили ссылку на System.Management? Также убедитесь, что целевая версия платформы не является профилем клиента.

Я считаю, что вам нужно добавить ссылки на файлы System.Management.*. Dll.

Если вы пришли из C++ фона, как я, я предполагаю, что у вас возникла та же концептуальная проблема, с которой я сталкивался в прошлом, когда считал использование операторов в C# аналогичным включению операторов в C/C++. Это тонкое различие, но оно привело меня к годам очень легкого замешательства, которое наконец прояснилось, когда я приобрел отражатель несколько лет назад...

Щелкните правой кнопкой мыши папку References для проекта, затем выберите Add Reference... и на вкладке.NET выберите System.Management.dll. (Возможно, вам придется немного подождать, пока появится DLL, этот список загружен лениво.)

Кроме того, в свойствах проекта убедитесь, что вы не нацелены на клиентский профиль.NET Framework: вам, скорее всего, понадобится полная версия.NET Framework 4.0.

Почему вы вообще что-то видите, не делая этого? Весьма запутанно, но между библиотеками и пространствами имен в библиотеках.NET не обязательно существует однозначное отношение.

Таким образом, даже если вы не включите ссылку на сборку System.Management.dll, вы все равно увидите один класс в пространстве имен System.Management - он включен в одну из других сборок, на которые вы уже ссылались, или сама сборка ядра системы.

Вы можете попробовать этот трюк самостоятельно, добавив свой собственный класс в пространство имен System.Management:

namespace System.Management
{
   public class MyClass
   {
   }
}

Это закончится в сборке, названной в свойствах вашего проекта, но будет принадлежать пространству имен System.Management,

Обратите внимание, что очень сложно сбить связь между именами пространства имен и именами сборок, так что не делайте этого!

Другие вопросы по тегам