HttpHandler с использованием пространства имен по умолчанию

У меня есть HttpHandler под названием Handler, который я компилирую в DLL и помещаю в папку / bin моего приложения ASP.NET. Тогда у меня есть файл .ashx:

<% @ webhandler language="C#" class="Handler" %> 

но я получаю сообщение об ошибке не удается создать обработчик типа.

Однако, если я заключу Handler в ненужное пространство имен, скажем foo и изменим .ashx на

<% @ webhandler language="C#" class="foo.Handler" %> 

работает нормально. Почему я не могу использовать пространство имен, то есть пространство имен по умолчанию? Microsoft опускает пространство имен во многих примерах HttpHandlers на веб-сайте msdn.


person I. J. Kennedy    schedule 20.03.2009    source источник


Ответы (1)


Это связано с природой сборок .Net. Любой ссылочный тип или ValueType должен быть заключен в пространство имен. Пространства имен используются для логической группировки. В вашем случае ваш класс Handler является определяемым пользователем ссылочным типом. Любая сборка может иметь одно или несколько корневых пространств имен в корне, но не может иметь ссылочный тип или тип значения в корне. Фактически, когда вы создаете новый проект библиотеки классов на вкладке «Приложения» в свойствах проекта, у него есть возможность указать пространство имен по умолчанию для вашего проекта библиотеки классов. Поэтому всякий раз, когда вы создаете новый класс в своем проекте, он будет обертывать его вокруг этого пространства имен по умолчанию, указанного в ProjectProperties.Application.DefaultNameSpace.

Если вы хотите увидеть это в действии, попробуйте открыть сборку .Net с помощью IL Disassemblar, который поставляется с .Net SDK.

person this. __curious_geek    schedule 14.04.2009