Соответствие ссылок .NET на пространства имен - PullRequest
0 голосов
/ 08 апреля 2010

Мне кажется, что это сбивает с толку - я создаю библиотеку классов и добавляю все необходимые ссылки для содержащихся в ней исходных файлов.

Теперь, с самого начала, было более 300 ошибок компилятора, жалующихся на отсутствующие пространства имен. Библиотека теперь скомпилируется после того, как я только что добавил все ссылки на System. *, Однако это явно не лучший способ.

т.е. если классу требуется using System.Web.Script;, ссылки на System.Web.Script нет, как я узнаю, какая из этих ссылок содержала его? System.Web не сделал.

Ответы [ 4 ]

2 голосов
/ 08 апреля 2010

Что ж, компилятор будет жаловаться на пропущенные классы, а не на пропущенные пространства имен. Вы должны искать классы в MSDN, там вы найдете соответствующее пространство имен и сборку.

Например, для DropDownList

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.dropdownlist%28v=VS.80%29.aspx

вверху вы можете прочитать

Namespace: System.Web.UI.WebControls
Assembly: System.Web (in system.web.dll)
2 голосов
/ 08 апреля 2010

Да, пространство имен и сборка - это две разные концепции в .NET ... Они могут, но не должны иметь общее имя.

Лучше всего проверить тип, который вы пропустили в MSDN (нажмите F1 в Visual Studio, когда ваш текстовый курсор находится над классом, который вы пропустили). В документации MSDN будет указано, в каком пространстве имен и в какой сборке определен этот тип.

1 голос
/ 08 апреля 2010

Вы также можете использовать обозреватель объектов в Visual Studio, чтобы щелкнуть пространство имен, и оно покажет сборку и путь к ней. Пока сборка находится в GAC или Visual Studio иным образом знает об этом, вы сможете найти ее там.

Вы также можете ввести «System.Web.Script» в поле поиска браузера объектов, и он найдет пространство имен, которое вы можете затем щелкнуть правой кнопкой мыши и сказать «Перейти к определению». Это приведет вас к родителю, который будет группировкой пространства имен / сборки, и вы увидите .dll, в которой он находится.

1 голос
/ 08 апреля 2010

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

// AssemblyFoo.dll
namespace MyNamespace {
    class Bar {}
}

// AssemblyBaz.dll
namespace MyNamespace {
    class Qux {}
}

Для MyNamespace.Bar вам нужно указать AssemblyFoo.dll, для MyNamespace.Qux вам нужно указать AssemblyBaz.dll. Вы не можете вывести нужные сборки только из пространства имен.

Лучшее, что вы можете сделать, это посмотреть, где класс определен с использованием MSDN.

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