2009-02-06 5 views
3

J'ai créé quelques classes pour mon projet Web et je vais les stocker dans le dossier App_Code. Je ne veux pas stocker toutes les classes au plus haut niveau (pas d'espace de noms) mais je veux les organiser en espaces de noms. Jusqu'à présent, cela ne semble pas possible parce que lorsque j'utilise le "using XXXX;" déclaration d'espace de noms il ne peut toujours pas trouver la bonne classe dans mon code derrière les fichiers. Que pourrais-je faire de façon incorrecte?Organiser des classes dans l'espace de noms dans le dossier App_Code ne fonctionne pas comme prévu

EDIT:

Ainsi, par exemple, j'ai

namespace foo 
{ 
    public class bar 
    { 
    } 
} 

Puis dans mon code behind pour default.aspx je

. 
. 
. 
using foo 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     bar NewBar = new bar(); 
    } 
} 

ci-dessus ne fonctionne pas pour moi, j'ai utiliser

foo.bar NewBar = new foo.bar(); 

Quelqu'un at-il une idée de ce que je fais mal? Bon, alors j'ai installé Visual Studio 2005 SP 1 et essayé de le convertir en une application Web et non un site Web. ENCORE pas de chance.

+0

quelle version de VS utilisez-vous? cela fonctionne pour moi –

+0

Fonctionne pour moi aussi, dans un projet de site Web VS2008. –

+0

https://msdn.microsoft.com/library/aa983464(v=vs.100).aspx – MacGyver

Répondre

1

Je l'ai compris. Je suis vraiment stupide. Désolé pour l'inquiétude. C'était parce que j'avais l'espace de noms et le nom de classe de la même manière, donc il ne pouvait pas différencier et avait besoin du nom complet. Dès que j'ai changé le nom de la classe tout a fonctionné comme prévu.

0

Avez-vous essayé de construire le projet tout d'abord et ensuite essayez de "les utiliser"?

+0

Je n'étais pas vraiment conscient qu'ils devaient d'abord construit. Pour les autres classes sans espace de noms, elles sont immédiatement utilisables. C'est seulement quand j'essaie de les organiser dans les espaces de noms. – uriDium

3

La solution la plus simple consisterait à placer les classes dans une bibliothèque de classes, puis à les référencer à partir de votre projet de site Web.

+0

Pas correct. J'ai un projet web qui a des classes espacées dans le dossier app_code. – ctrlalt3nd

+0

Ce n'est absolument pas le cas du tout. –

+0

Je peux arriver à la classe MAIS quand je mets en utilisant xxxx; alors dans ma classe j'ai quelque chose comme xxxx newxxxx = new xxxx(); qui ne fonctionne pas. Je dois encore ajouter l'espace de noms pour le faire fonctionner comme ça xxxx.xxxx newxxxx = new xxxx(); ça marche. – uriDium

1

avez-vous mis

namespace blah 
{ 
    ... 
} 

dans les fichiers de code?

1

Vous utilisez un projet de site Web plutôt qu'un projet d'application Web. Les projets de site Web compilent tous les fichiers .cs (y compris ceux dans App_Code) à la volée, de sorte que vous pouvez les mettre à jour sur le serveur Web, sans les recompiler. Ils sont compilés dans des DLL temporaires, qui, dans des circonstances normales, ne seront pas visibles pour vous (c'est-à-dire rien dans la corbeille). Vous avez très peu de contrôle sur les espaces de noms lors de l'écriture de projets de sites Web, comme vous l'avez découvert. Si vous souhaitez un meilleur code structuré et plus de contrôle sur les espaces de noms, alors convert it to a Web Application Project. Votre code côté serveur sera compilé dans une DLL et placé dans le dossier bin.

11

(Je devine ici) Essayez d'ouvrir les propriétés du fichier et de définir l'action de compilation à "compiler".

+0

Cette solution a fonctionné pour moi. – regex

+0

Oui, celui-ci a travaillé pour moi aussi .. – miccet

+0

c'est une réponse acceptable – jim

0

Je viens d'essayer votre exemple de code exact dans VS2005 et cela fonctionne comme prévu avec la directive using, pas besoin de construire le site d'abord ou quoi que ce soit.

Cela me dit qu'il y a quelque chose d'autre qui ne va pas dans votre projet et/ou dans vos espaces de noms. Va-t-il se construire si vous faites un clic droit et choisissez "Construire un site Web"?

Quand vous dites que ça ne marche pas, de quelle manière exactement cela ne fonctionne-t-il pas? Est-ce que le site ne construit pas? Pas d'achèvement intellisense? Message d'erreur lorsque vous naviguez sur la page?

+0

Je ne peux pas tester maintenant. Je viens de commencer l'installation de VS 2005 sp1 pour obtenir le support d'applications web comme quelques affiches suggérées. Quand je ne travaille pas, je veux dire que l'intellisense amène d'abord l'espace de noms puis la classe. Malgré le fait que j'ai utilisé. Si je force la compilation => erreur du compilateur – uriDium

0

Faites un clic droit sur « classe » et select-> « propriété » changer la « propriété » To-> compiler et sur e .aspx « écrire le nom d'espace de noms »

Il fonctionne très bien.

Questions connexes