Как реализовано автоматически сгенерированное пространство имен ASP для проекта веб-сайта ASP.NET, от начала (сборки) до завершения (времени выполнения)? - PullRequest
1 голос
/ 11 августа 2011

Кажется, что пространство имен «ASP» генерируется, потому что оно нигде не используется в исходном коде проекта веб-сайта (или, по крайней мере, явно не используется программистом веб-сайта). Хотелось бы узнать, как это полностью реализовано.

Например:
Является ли MSBuild ответственным за создание пространства имен ASP и если так, где находится эта инструкция? я знаю, что компилятор C # не будет создавать пространство имен из ничего по собственному желанию, поэтому пространство имен ASP должно быть введено в него, даже если не используется программистом сайта. Может это сгенерирован в исходный код с помощью другого инструмента. Папка «Temporary ASP.NET Files» может иметь некоторое отношение к ней. Как и ты можно увидеть, я хочу все кровавые детали, чтобы разблокировать и понять это пространство имен ...

В Visual Studio, похоже, есть инструменты, позволяющие использовать пространство имен ASP (поддержка IntelliSense для него), но это маскирует мое понимание этого.

Как пространство имен 'ASP' реализуется на веб-сайте от начала до конца?

(Я не нашел хорошую статью, которая объясняет все это.)


Здесь пространство имен ASP показано в .NET Reflector. (Это изображение взято из блога Рика Строля )

enter image description here

Ответы [ 3 ]

0 голосов
/ 11 августа 2011

Это пространство имен используется в коде, который ASP.NET генерирует при разборе файлов .aspx и .ascx.

Я понятия не имею, почему тебя это волнует. Это просто пространство имен. В этом нет ничего «особенного», и вы не должны ссылаться на что-либо в этом пространстве имен.


Чтобы понять, как все это работает, прочитайте « Жизненный цикл ASP.NET ».

0 голосов
/ 06 февраля 2013

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

Вы можете контролировать, какое имя пользовательский элемент управления может принимать в ASP.Пространство имен, поместив ClassName="ControlClass" в объявление пространства имен, и динамический элемент управления теперь будет иметь ссылку на ASP.ControlClass, чтобы выполнить безопасное приведение при использовании LoadControl

. Вы можете прочитать полноешаги по MSDN http://msdn.microsoft.com/en-us/library/c0az2h86(v=vs.100).aspx

Когда вы не используете ASP.Пространство имён и оставленный элемент управления принимает автоматическое имя, тогда дело может завершиться неудачей (я не знаю почему, но время от времени оно не срабатывает на моем сервере) Ссылка, которая там создается,

namespace ASP
{
    [CompilerGlobalScope]
    public class Control_Class_nameByDirectory : ControlClass
    {
        [DebuggerNonUserCode]
        public ControlClass();

        protected override bool SupportAutoEvents { get; }

        [DebuggerNonUserCode]
        protected override void FrameworkInitialize();
    }
}

И когда выпопытайтесь выполнить приведение типа (ControlClass)LoadControl("~/module/Control.ascs"), оно может завершиться неудачей, поскольку распознается как Control_Class_nameByDirectory, а не как ControlClass

Теперь, если вы объявите ClassName в заголовке элемента управления, как говорит MSD, результатом будетcontrol, чтобы получить то же имя ClassName, которое вы определили:

namespace ASP
{
    [CompilerGlobalScope]
    public class ControlClass : global::ControlClass
    {
        [DebuggerNonUserCode]
        public ControlClass();

        protected override bool SupportAutoEvents { get; }

        [DebuggerNonUserCode]
        protected override void FrameworkInitialize();
    }
}

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

шаги, которые описаны здесь http://msdn.microsoft.com/en-us/library/c0az2h86(v=vs.100).aspx, вы можете избежать подобных проблем.(и что я с ними сталкивался)

Проблема невозможности создания пользовательского элемента управления без ссылки на ASP.пространство имен было замечено в версиях Dot net 4.0 и 4.5.И хуже всего то, что это случайный сбой - это означает, что иногда случается, а иногда нет, и я не смог найти причину.

0 голосов
/ 11 августа 2011

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

Префикс зарегистрирован в файле web.configпод конфигурацией / system.Web / pages / controls.Вы можете изменить его, если хотите, или зарегистрировать дополнительные префиксы для своих собственных управляющих библиотек.

Информация MSDN здесь: http://msdn.microsoft.com/en-us/library/ms164640.aspx

...