使用默认命名空间的 HttpHandler
Posted
技术标签:
【中文标题】使用默认命名空间的 HttpHandler【英文标题】:HttpHandler using Default Namespace 【发布时间】:2010-10-14 14:15:36 【问题描述】:我有一个名为 Handler 的 HttpHandler,我将它编译成一个 DLL 并放入我的 ASP.NET 应用程序的 /bin 文件夹中。然后我有一个 .ashx 文件:
<% @ webhandler language="C#" class="Handler" %>
但我得到一个无法创建类型'处理程序'错误。
但是,如果我将 Handler 包装在一个免费的命名空间中,比如 foo,然后将 .ashx 更改为
<% @ webhandler language="C#" class="foo.Handler" %>
它工作正常。为什么我不能不使用命名空间,呃,默认命名空间? Microsoft 在 msdn 网站上的许多 HttpHandler 示例中省略了命名空间。
【问题讨论】:
【参考方案1】:这是因为 .Net 程序集的性质。任何引用类型或值类型都必须包装在命名空间周围。命名空间用于逻辑分组。在您的情况下,您的类“处理程序”是用户定义的引用类型。任何程序集都可以在根处具有一个或多个根命名空间,但它不能在根处具有引用类型或值类型。事实上,当您在项目属性的应用程序选项卡中创建一个新的类库项目时,它有一个选项可以为您的类库项目指定默认命名空间。因此,每当您在项目中创建一个新类时,它都会将其包装在 ProjectProperties.Application.DefaultNameSpace 中指定的默认名称空间中。
如果您希望看到这一点,请尝试使用 .Net SDK 附带的 IL Disassemblar 打开您的 .Net 程序集。
【讨论】:
以上是关于使用默认命名空间的 HttpHandler的主要内容,如果未能解决你的问题,请参考以下文章