我有一个名为 Handler 的 HttpHandler,我将它编译成一个 DLL 并放在我的 ASP.NET 应用程序的/bin 文件夹中。然后我有一个 .ashx 文件:
<% @ webhandler language="C#" class="Handler" %>
但我收到了无法创建类型“处理程序”的错误。
但是,如果我将 Handler 包装在一个免费的命名空间中,比如 foo ,并将 .ashx 更改为
<% @ webhandler language="C#" class="foo.Handler" %>
它工作正常。为什么我不能使用no namespace,呃,默认的namespace? Microsoft 在 msdn 网站上的许多 HttpHandlers 示例中省略了命名空间。
最佳答案
这是因为 .Net 程序集的性质。任何引用类型或值类型都必须围绕命名空间。命名空间用于逻辑分组。在您的情况下,您的类 'Handler' 是用户定义的引用类型。任何程序集的根都可以有一个或多个根命名空间,但根不能有引用类型或值类型。事实上,当您在项目属性的应用程序选项卡中创建一个新的类库项目时,它有一个选项为您的类库项目指定默认命名空间。因此,每当您在项目中创建一个新类时,它都会将它包装在 ProjectProperties.Application.DefaultNameSpace 中指定的这个默认命名空间周围。
如果您希望看到此操作,请尝试使用 .Net SDK 附带的 IL Disassemblar 打开您的 .Net 程序集。
关于asp.net - 使用默认命名空间的 HttpHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666927/