Вопрос:

Путаница с корневым пространством имен в веб-проекте Asp.net

asp.net vb.net namespaces

2841 просмотра

2 ответа

3024 Репутация автора

У меня есть решение VS2008 с 2 проектами, WebUI и Domain; WebUI ссылки на домен

Пространство корневых имен в проекте WebUI: MyCompany.MyProjectName.WebUI
Пространство корневых имен в проекте домена пустое. (Пространства имен объявляются вручную для всех классов)

Так что все работало нормально, пока я не попытался сослаться на класс в Домене по полному пути: MyCompany.MyProjectName.Domain.EntityClasses.SomeClassName

VS не смог найти класс. Тем не менее, если я в верхней части файла кода: Imports MyCompany.MyProjectName.Domain.EntityClasses

.... тогда это видно. (Так же, как SomeClassname, а не полное имя)

Есть ли в этом смысл?

Итак, я очистил свое корневое пространство имен WebUI и вуаля, тогда полностью квалифицированное объявление работает. Тем не менее, выполнение этого, казалось, лишило законной силы регистрации всех моих пользовательских элементов управления на моих страницах. Единственное, что, казалось, решило эту проблему, было в коде каждого пользовательского элемента управления, вручную добавить пространство имен MyCompany.MyProjectName.WebUI ..., которое могло бы иметь смысл, так как, возможно, пространства имен страниц все же сохранили значение корневого пространства имен. Но если бы мне нужно было создать совершенно новую страницу aspx и добавить пользовательский элемент управления (это до добавления пространства имен вручную), даже эта страница не смогла бы правильно зарегистрировать ее. Тем не менее, элемент управления uwer правильно отображается в режиме конструктора .... поэтому интерфейс пользователя VS, похоже, способен правильно его разрешить, но компилятор, по-видимому, не может.

Итак, из того, что я могу сказать, я могу, по крайней мере, заставить вещи работать, вручную оборачивая пользовательские элементы управления в правильное пространство имен. Почему это необходимо для страниц aspx, для которых не указано пространство имен, чтобы видеть пользовательские элементы управления, похоже, не имеет смысла.

Есть ли какой-то фундаментальный принцип, который я неправильно понимаю?

Автор: tbone Источник Размещён: 10.02.2010 09:06

Ответы (2)


1 плюс

3024 Репутация автора

Решение

Хорошо, я думаю, что это проблема:

Если у вас есть корневое пространство имен, указанное для вашего проекта, и вы создаете новую страницу aspx, страница aspx жестко закодирует корневое пространство имен в своем определении во время создания , то есть:

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/DefaultMasterPage.Master" CodeBehind="Home.aspx.vb" Inherits="yourCompany.yourApp.WebUI.Home" %>

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

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/MasterPages/DefaultMasterPage.Master" CodeBehind="Home.aspx.vb" Inherits=".Home" 

Таким образом, если вы измените корневое пространство имен на полпути, все предыдущие страницы aspx будут жестко закодированы в старое значение. Тем не менее, я думаю, что код для aspx действительно реагирует на удаление корневого пространства имен, поэтому вы начинаете странно себя вести с пользовательскими элементами управления и т. Д., И вам нужно изучить весь код и явно указать соответствующее пространство имен в там для страниц, чтобы работать должным образом. В этом случае, я думаю, что лучше всего найти во всех ваших aspx-файлах это явное определение пространства имен (в теге Inherits) и удалить его. Я думаю, вы все равно сможете явно установить пространство имен в коде, если вы так решите, который aspx унаследует. Хотя не уверен на 100%.

Короче говоря, решите, какой метод именования пространства имен вы хотите в начале, и придерживайтесь его.

Автор: tbone Размещён: 11.02.2010 12:24

0 плюса

4932 Репутация автора

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

Автор: indra Размещён: 23.08.2010 01:17
Вопросы из категории :
32x32