Подтвердить что ты не робот

Когда это пространство имен .NET реализовано компонентом .NET Framework?

(Еще один вопрос из моей серии "Ясно, что я единственный идиот" ).

Когда мне нужно использовать класс из .NET Framework, я добросовестно просматриваю документацию, чтобы определить соответствующее пространство имен, а затем добавить директиву "using" в исходный код:

using System.Text.RegularExpressions;

Обычно мне хорошо идти в этот момент, но иногда Intellisense не распознает новый класс, и проект не будет создан. Быстрая проверка в обозревателе объектов подтверждает, что у меня есть правильное пространство имен. Наступает разочарование.

Использование HttpUtility.UrlEncode() включало добавление соответствующей директивы:

using System.Web;

Но также потребовалось добавить ссылку на .NET Framework Component для System.Web, то есть щелкнуть правой кнопкой мыши проект в обозревателе решений, выбрать Добавить ссылку и добавить System.Web со вкладки .NET.

Как я могу различить документацию по внедрению .NET пространства имен компонентом .NET Framework, на который нужно ссылаться? Я бы предпочел не охотиться за доступными компонентами каждый раз, когда я использую пространство имен во время отсутствия необходимости в ссылке.

(Для тех, кто любит оставаться после урока и очищает стиратели: "Упорядочить использование" > "Удалить и сортировать" также удалить ссылки на компоненты, которые не используются в другом месте проекта? Как вы очищаете ненужные ссылки?)

4b9b3361

Ответ 1

Посмотрите эту ссылку для UrlEncode:

Пространство имен: System.Web

Сборка: System.Web(в System.Web.dll)

Строка Assembly сообщает вам, какую DLL ссылаться.

Ответ 2

Вы заметите, что в документации (например, http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx) указано имя сборки/библиотеки DLL, в которой должен быть найден класс в, вместе с пространством имен классов.

Пространство имен: System.Web
Сборка: System.Web(в System.Web.dll)

С другой стороны, я знаю, что это может быть немного дорого, но Resharper делает такие вещи намного проще. Если вы серьезный разработчик, вы можете рассмотреть возможность инвестирования в лицензию. Для очистителей-ластиков Resharper добавляет удобный элемент "Найти код, зависящий от модуля", в меню правой кнопки мыши по ссылкам в обозревателе решений. Это не совсем автоматическая очистка, но гораздо проще понять, используется ли что-то еще в вашем проекте.

Ответ 3

Документация указывает две вещи для любого типа:

  • Пространство имен типа (для директивы use)
  • Сборка, содержащая тип (это то, к чему вы добавляете ссылку)

Чтобы взять пример, в котором эти два варианта, рассмотрите документацию для Enumerable:

Пространство имен: System.Linq
Сборка: System.Core(в System.Core.dll)

Ответ 5

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

Большинство сборок называются такими же, как и основное пространство имен, которое содержится в них. Например, System.Web существует в System.Web.dll. В документации также обычно указывается, какая сборка должна быть указана.

Ответ 6

Я думаю, что вы столкнулись с различием между С# и C здесь. Для сравнения: в C все, что вам нужно сделать, чтобы включить новую библиотеку, - это включить ее в заголовок.

Это .net, вам нужно знать 2 вещи:

  • Пространство имен может охватывать более одной сборки /dll (это означает, что вы не можете получить ошибку компилятора в предложении using, поскольку ссылаются на некоторые из DLL, которые поддерживают это пространство имен - просто не тот, который вам нужен)
  • Чтобы "видеть" содержимое данной сборки, вы должны добавить ссылку на нее. В только что используемом предложении вы получите короткий синтаксис, чтобы вы могли написать HttpUtility.Encode() вместо System.Web.HttpUtility.UrlEncode(), вам нужно добавить ссылку, чтобы компилятор "знал", о классе.

Чтобы избежать вашей проблемы:

В документах MSDN обратите внимание на сборку, в которой находится класс, и убедитесь, что у вас есть ссылка на сборку.

Ответ 7

Если вы просматриваете MSDN для класса, который вы пытаетесь использовать. Обычно он сообщает вам, что класс находится внутри. Например, класс Regex находится в Системе сборки (в System.dll) или в HttpUtility находится в Assembly System.Web(в System.Web.dll).

Я считаю, что такие инструменты, как ReSharper, помогают в этом, а также автоматически ссылаются на необходимые вам сборки.

Я уверен, что вам нужно вручную удалить неиспользуемые ссылки в проектах С#. В проектах VB.NET есть кнопка для отображения неиспользуемых ссылок, когда вы находитесь на странице свойств проекта. Однако я не вижу этого в проектах на С#.