4

我有一个名为 Handler 的 HttpHandler,我将它编译成一个 DLL 并放入我的 ASP.NET 应用程序的 /bin 文件夹中。然后我有一个 .ashx 文件:

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

但我得到一个无法创建类型“处理程序”的错误。

但是,如果我将 Handler 包装在一个免费的命名空间中,比如foo,并将 .ashx 更改为

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

它工作正常。为什么我不能不使用命名空间,呃,默认命名空间?Microsoft 在 msdn 网站上的许多 HttpHandler 示例中省略了命名空间。

4

1 回答 1

3

这是因为 .Net 程序集的性质。任何引用类型或值类型都必须包装在命名空间周围。命名空间用于逻辑分组。在您的情况下,您的类“处理程序”是用户定义的引用类型。任何程序集都可以在根处有一个或多个根命名空间,但它不能在根处有引用类型或值类型。事实上,当您在项目属性的应用程序选项卡中创建一个新的类库项目时,它有一个选项可以为您的类库项目指定默认命名空间。因此,每当您在项目中创建一个新类时,它都会将其包装在 ProjectProperties.Application.DefaultNameSpace 中指定的默认名称空间中。

如果您希望看到这一点,请尝试使用 .Net SDK 附带的 IL Disassemblar 打开您的 .Net 程序集。

于 2009-04-14T12:37:36.110 回答