HttpHandler с использованием пространства имен по умолчанию
-
21-08-2019 - |
Вопрос
У меня есть HttpHandler под названием Handler, который я компилирую в DLL и помещаю в папку /bin моего приложения ASP.NET.Затем у меня есть файл .ashx:
<% @ webhandler language="C#" class="Handler" %>
но я получаю невозможно создать тип «Обработчик» ошибка.
Однако, если я оберну Handler в свободное пространство имен, скажем фу, и измените .ashx на
<% @ webhandler language="C#" class="foo.Handler" %>
он работает нормально.Почему я не могу использовать пространство имен, то есть пространство имен по умолчанию?Microsoft опускает пространство имен во многих примерах HttpHandlers на веб-сайте msdn.
Решение
Это связано с природой сборок .Net.Любой ссылочный тип или ValueType должен быть заключен в пространство имен.Пространства имен используются для логической группировки.В вашем случае ваш класс «Handler» представляет собой определяемый пользователем ссылочный тип.Любая сборка может иметь одно или несколько корневых пространств имен в корне, но не может иметь в корне ссылочный тип или тип значения.Фактически, когда вы создаете новый проект библиотеки классов на вкладке «Приложения» свойств проекта, у него есть возможность указать пространство имен по умолчанию для вашего проекта библиотеки классов.Поэтому всякий раз, когда вы создаете новый класс в своем проекте, он оборачивает его вокруг пространства имен по умолчанию, указанного в ProjectProperties.Application.DefaultNameSpace.
Если вы хотите увидеть это в действии, попробуйте открыть сборку .Net с помощью IL Disassemblar, который поставляется с .Net SDK.