2009-03-20 2 views
4

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

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

, но я получаю не может создать тип ошибку «Handler».

Однако, если я оберните Handler в безвозмездном пространстве имен, скажем Foo и изменить .ashx к

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

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

ответ

3

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

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