Проблема при получении типа, чтобы появиться в intellisense из ссылки на проект - PullRequest
0 голосов
/ 18 февраля 2009

Я получаю сообщение об ошибке компилятора о том, что «Acme.Business.User» не определено.

У меня есть проект библиотеки классов под названием «Acme.Business», в котором «Acme.Business» также используется в качестве имени сборки и корневого пространства имен. Ни один из классов не использует ключевое слово "Пространство имен", поэтому все они должны существовать в пространстве имен "Acme.Business".

У меня также есть проект библиотеки классов под названием «Acme.Web», в котором есть ссылка на проект «Acme.Business». И снова «Acme.Web» - это имя проекта, имя сборки и корневое пространство имен.

Вот странная часть. Если я добавлю класс в «Acme.Web», я могу напечатать «Imports Acme». вверху видно, что оба пространства имен отображаются в intellisense, как и следовало ожидать, но если я попытаюсь сделать «Dim x as New Acme.Business.User», то «Business» не отобразится в intellisense, и я получу сообщение об ошибке "Acme.Business.User" не определено.

Я не вижу, что я делаю неправильно! Пожалуйста помоги. Спасибо.

Ответы [ 2 ]

1 голос
/ 18 февраля 2009

Я думаю, вы, возможно, неправильно понимаете, как работают пространства имен проекта по умолчанию. Пространство имен по умолчанию - это параметр файла проекта, который просто сообщает Visual Studio, какое пространство имен добавить в каждый файл при добавлении нового файла класса в проект. Если вы удалили все эти пространства имен из файлов кода, то ваши типы не существуют в этом пространстве имен.

Это означает, что все ваши типы в сборке Acme.Business живут в глобальном пространстве имен, что, вероятно, не то, что вам нужно. Чтобы получить желаемое поведение, вам необходимо добавить пространства имен обратно в файлы кода, поскольку это единственный способ, которым компилятор создает имена типов с этим пространством имен.

0 голосов
/ 18 февраля 2009

ОК, я понял, что поведение, которое я видел, было связано с тем, что я объявлял пространства имен в коде в Acme. Пространство имен Acme.Web.UI.WebControls . Я не осознавал, что в VB.NET он строится поверх того, что было указано для корневого пространства имен. Я удалил часть, которая была указана в настройке «корневого пространства имен» моего проекта, и он начал работать. Поэтому мои пространства имен в коде для Acme.Web теперь выглядят как UI.WebControls пространства имен .

...