Les classes résidant dans App_Code ne sont pas accessibles

198

J'ai créé un site Web dans ASP.NET et j'ai créé une classe et l'ai placée à l'intérieur du dossier App_Code. Cependant, je ne peux pas y accéder à partir de mes autres pages. Faut-il configurer quelque chose pour permettre cela? Je l'ai fait fonctionner dans les projets précédents, mais pas dans celui-ci, en quelque sorte.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
Malachie
la source
1
Je suppose que vous incluez l'espace de noms dans vos pages Web?
Alex Czarto
1
Duplicata possible - stackoverflow.com/questions/409070/…
vapcguy

Réponses:

639

Faites un clic droit sur le .csfichier dans le App_Codedossier et vérifiez ses propriétés.

Assurez-vous que "Build Action" est réglé sur "Compile".

StevenMcD
la source
10
Comment pouvez-vous définir cela comme l'action de génération par défaut? ou dois-je le faire pour chaque fichier du dossier App_Code?
Malachi
3
Pourquoi ne puis-je pas faire cela dans Visual Studio 2012 ??!
RSK
4
Cela semble être un bogue dans VS2012. Ça m'arrive aussi.
James Nail
2
pour ceux qui veulent plus de détails, vous pouvez trouver sur: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian
3
Oui, cela a résolu 142 erreurs dans mon projet Visual Studio, merci beaucoup d'avoir partagé cette solution: -]
Michael G. Workman
14

Mettez ceci en haut des autres fichiers où vous souhaitez accéder à la classe:

using CLIck10.App_Code;

OU accédez à la classe à partir d'autres fichiers comme celui-ci:

CLIck10.App_Code.Glob

Je ne sais pas si c'est votre problème ou non, mais si vous étiez nouveau dans C #, c'est un problème facile à résoudre.

Mise à jour: J'ai récemment découvert que si j'ajoute un dossier App_Code à un projet, je dois fermer / rouvrir Visual Studio pour qu'il reconnaisse correctement ce dossier "spécial".

AaronLS
la source
1
C'était quelque chose à voir avec l'action de construction par son apparence - la réponse de FailBoy a résolu le problème. Merci d'avoir répondu quand même :)
Malachi
Joli qui a fonctionné lorsque j'ai ajouté un espace de noms à la classe dans le dossier App_Code.
mashtheweb
Pourquoi devons-nous inclure le namspace comme ça? Pourquoi intelliSense n'est pas en mesure d'accéder à cette classe sans spécifier le nom du dossier?
Elham Kohestani
10

Accédez à la page à partir de laquelle vous souhaitez accéder à la classe App_code, puis ajoutez l'espace de noms de la classe app_code. Vous devez fournir une usingdéclaration, comme suit:

using WebApplication3.App_Code;

Après cela, vous devrez accéder à la propriété de la classe app_code et définir «Build Action» sur «Compile».

user3363647
la source
4

assurez-vous que vous utilisez le même espace de noms que vos pages


la source
1
Mais pourquoi quand c'est dans APP_CODE? Je pensais que tout ce qu'il y avait avec des classes PUBLIC devrait être exposé automatiquement dans la solution!?
Fandango68
4

Je n'ai pas encore compris pourquoi cela se produit, mais j'avais des classes qui se trouvaient dans mon App_Codedossier qui appelaient des méthodes les unes dans les autres, et je le faisais bien quand j'ai construit un projet .NET 4.5.2, mais j'ai dû revenir à 4.0 car le serveur cible n'était pas mis à niveau. C'est à ce moment que j'ai trouvé ce problème (après avoir corrigé lelangversion dans mon web.config de 6 à 5 ... une autre histoire) ....

Une de mes méthodes a continué d'avoir une erreur comme:

The type X.Y conflicts with the imported type X.Y in MyProject.DLL

Toutes mes classes étaient déjà définies sur "Compiler" dans leurs propriétés, comme suggéré dans la réponse acceptée ici, et chacune avait un espace de noms commun qui était le même, et chacune avait using MyNamespace;en haut de chaque classe.

J'ai constaté que si je déplaçais simplement les classes incriminées qui devaient appeler des méthodes les unes dans les autres vers un autre dossier standard nommé autre que "App_Code", elles cessaient d'avoir ce problème de conflit.

Remarque : Si vous créez un dossier standard appelé "AppCode", y déplacez vos classes, supprimez le dossier "App_Code", puis renommez "AppCode" en "App_Code", vos problèmes reviendront. Peu importe si vous utilisez l'option "Nouveau dossier" ou "Ajouter un dossier ASP .NET" pour créer "App_Code" - il semble saisir le nom.

Peut-être que ce n'est qu'un problème .NET 4.0 (et peut-être plus tôt) ... J'étais très bien en 4.5.2 avant de devoir revenir!

vapcguy
la source
0

J'ai trouvé plus facile de déplacer les fichiers dans un projet de bibliothèque de classes distinct, puis de référencer ce projet dans le projet Web et d'appliquer l'espace de noms dans la usingsection du fichier. Pour une raison quelconque, les autres solutions ne fonctionnaient pas pour moi, mais ce travail a fonctionné.

Zarepheth
la source
0

Dans mon cas, je n'ai pas pu obtenir un projet à construire avec des classes définies dans le dossier App_Code.

Impossible de reproduire le scénario précisément pour commenter, mais a dû fermer et rouvrir Visual Studio pour qu'Intellisense coopère, d'accord ...

J'ai remarqué que lorsqu'une classe du dossier App_Code est définie sur «Compiler» au lieu de «Contenu» (cliquez dessus avec le bouton droit) que les erreurs provenaient d'une deuxième version de la classe ... Regardez à l'extrême gauche de la 3 des 3 champs entre le volet de code et l'onglet. «L'autre» s'appelait quelque chose comme 10_App_Code ou similaire.

Pour corriger le problème, j'ai renommé le dossier App_Code en Code, défini explicitement les espaces de noms sur les classes et défini toutes les classes sur «Compiler»

hngr18
la source