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
,
Обратите внимание, что очень сложно сбить связь между именами пространства имен и именами сборок, так что не делайте этого!