0

Я получаю ошибку компилятора, говоря, что «Acme.Business.User» не определен.Проблема получения типа в intellisense из ссылки на проект

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

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

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

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

ответ

0

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

1

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

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

+0

Спасибо, что ответили. Я не думаю, что это так. Может быть, с C#, но с VB.NET, если я добавлю новый класс, он не закроется в пространстве имен. Кроме того, ссылаясь на типы в Acme.Business, отлично работает с моими кодовыми страницами, поэтому я думаю, что Acme.Business в порядке, но Acme.Web должен измениться. – adam0101

+0

Ну, вы правы, что они находятся в глобальном пространстве имен, но они все еще находятся в указанном корневом пространстве имен под этим, потому что я получаю к ним вот так: «Dim x as new Global.Acme.Business.User». Я не знаю, что изменилось, потому что мне никогда не приходилось указывать пространство имен в коде раньше, и это сработало – adam0101

Смежные вопросы