2009-03-20 8 views
4

J'ai un HttpHandler appelé Handler que je compile dans une DLL et le place dans le dossier/bin de mon application ASP.NET. Ensuite, j'ai un fichier .ashx:HttpHandler utilisant l'espace de nom par défaut

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

mais je reçois un ne peut pas créer de type « gestionnaire » erreur.

Cependant, si je conclurai gestionnaire dans un espace de noms à titre gratuit, dire foo, et changer le .ashx à

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

il fonctionne très bien. Pourquoi ne puis-je pas utiliser d'espace de noms, euh, l'espace de noms par défaut? Microsoft omet un espace de noms dans de nombreux exemples de HttpHandlers sur le site Web msdn.

Répondre

3

Ceci est dû à la nature des assemblages .Net. Tout type de référence ou ValueType doit être entouré d'un espace de noms. Les espaces de noms sont utilisés pour le groupement logique. Dans votre cas, votre classe 'Handler' est un type de référence défini par l'utilisateur. Tout assembly peut avoir un ou plusieurs espaces de noms racine à la racine, mais il ne peut pas avoir de type de référence ou de type de valeur à la racine. En fait, lorsque vous créez un projet de bibliothèque de classes dans l'onglet Applications des propriétés du projet, vous avez la possibilité de spécifier l'espace de nom par défaut pour votre projet de bibliothèque de classes. Ainsi, chaque fois que vous créez une nouvelle classe dans votre projet, elle l'entoure autour de cet espace de noms par défaut spécifié dans ProjectProperties.Application.DefaultNameSpace.

Si vous souhaitez voir cela en action, essayez d'ouvrir votre .Net Assembly avec IL Disassemblar fourni avec .Net SDK.

Questions connexes