2009-03-20 8 views
4

Ich habe einen HttpHandler namens Handler, die ich in eine DLL kompiliere und in den Ordner/bin meiner ASP.NET-App legen. Dann habe ich eine .ashx Datei:HttpHandler mit Standard-Namespace

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

aber ich bekomme ein nicht Typen erstellen Fehler ‚Handler‘.

Wenn ich jedoch Handler in einem unentgeltlichen Namespace wickeln, sagen foo und die .ashx zu

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

fein funktioniert es ändern. Warum kann ich keinen Namespace verwenden, äh, den Standard-Namespace? Microsoft verzichtet in vielen Beispielen für HttpHandlers auf der msdn-Website auf einen Namespace.

Antwort

3

Dies liegt an der Natur von .Net-Baugruppen. Jeder Referenztyp oder ValueType muss um einen Namespace gewickelt werden. Namespaces werden für die logische Gruppierung verwendet. In Ihrem Fall ist Ihre Klasse 'Handler' ein benutzerdefinierter Referenztyp. Jede Assembly kann einen oder mehrere Root-Namespaces im Stammverzeichnis haben, aber keinen Referenztyp oder Werttyp im Stammverzeichnis. Wenn Sie auf der Registerkarte "Anwendungen" der Projekteigenschaften ein neues Klassenbibliotheksprojekt erstellen, verfügt es über die Option, den Standardnamespace für das Klassenbibliotheksprojekt anzugeben. Wenn Sie also in Ihrem Projekt eine neue Klasse erstellen, wird diese um den in ProjectProperties.Application.DefaultNameSpace angegebenen Standard-NameSpace umbrochen.

Wenn Sie dies in Aktion sehen möchten, öffnen Sie Ihre .Net Assembly mit IL Disassemblar, das mit .Net SDK geliefert wird.