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

StackOverflow https://stackoverflow.com/questions/666927

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top