C # System.Management имеет только 1 класс? - PullRequest
1 голос
/ 01 октября 2011

Я пытался использовать 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 ]

4 голосов
/ 01 октября 2011

System.Management.Instrumentation это не класс , это пространство имен.С учетом имеющихся у вас директив использования, если у вас есть ссылка на System.Management.dll, вы сможете написать такой код:

ObjectQuery query = new ObjectQuery("...");
1 голос
/ 01 октября 2011

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

DefaultManagementInstaller Class
DefaultManagementProjectInstaller Class
IEvent Interface
IgnoreMemberAttribute Class
IInstance Interface
Instance Class
InstanceNotFoundException Class
Instrumentation Class
InstrumentationBaseException Class
InstrumentationClassAttribute Class
InstrumentationException Class
InstrumentationManager Class
InstrumentationType Enumeration
InstrumentedAttribute Class
ManagedCommonProvider Class
ManagedNameAttribute Class
ManagementBindAttribute Class
ManagementCommitAttribute Class
ManagementConfigurationAttribute Class
ManagementConfigurationType Enumeration
ManagementCreateAttribute Class
ManagementEntityAttribute Class
ManagementEnumeratorAttribute Class
ManagementHostingModel Enumeration
ManagementInstaller Class
ManagementKeyAttribute Class
ManagementMemberAttribute Class
ManagementNameAttribute Class
ManagementNewInstanceAttribute Class
ManagementProbeAttribute Class
ManagementQualifierAttribute Class
ManagementQualifierFlavors Enumeration
ManagementReferenceAttribute Class
ManagementRemoveAttribute Class
ManagementTaskAttribute Class
WmiConfigurationAttribute Class
WmiProviderInstallationException Class

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

1 голос
/ 01 октября 2011

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

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

1 голос
/ 01 октября 2011

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

0 голосов
/ 01 октября 2011

Щелкните правой кнопкой мыши папку 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.

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

...