Las clases que residen en App_Code no son accesibles

198

Creé un sitio web en ASP.NET y creé una clase y la puse dentro de la carpeta App_Code. Sin embargo, no puedo acceder a esto desde mis otras páginas. ¿Es necesario configurar algo para permitir esto? Lo hice funcionar en proyectos anteriores, pero no en este, de alguna manera.

namespace CLIck10.App_Code
{
    public static class Glob
    {
        ...
    }
}
Malaquías
fuente
1
¿Supongo que está incluyendo el espacio de nombres en sus páginas web?
Alex Czarto
1
Posible duplicado - stackoverflow.com/questions/409070/…
vapcguy

Respuestas:

639

Haga clic derecho en el .csarchivo en la App_Codecarpeta y verifique sus propiedades.

Asegúrese de que la "Acción de compilación" esté configurada en "Compilar".

StevenMcD
fuente
10
¿Cómo puede establecer esto como la acción de compilación predeterminada? ¿o tengo que hacer eso para cada archivo en la carpeta App_Code?
Malaquías
3
¿Por qué no puedo hacer esto en Visual Studio 2012?
RSK
44
Esto parece ser un error en VS2012. Me pasa a mí también.
James Nail
2
para aquellos que quieren más detalles, pueden encontrar en: how-to-code-net.blogspot.ro/2014/04/…
Alexa Adrian
3
Sí, esto resolvió 142 errores en mi proyecto de Visual Studio, muchas gracias por compartir esta solución: -]
Michael G. Workman
14

Ponga esto en la parte superior de los otros archivos donde desea acceder a la clase:

using CLIck10.App_Code;

O acceda a la clase desde otros archivos como este:

CLIck10.App_Code.Glob

No estoy seguro de si ese es su problema o no, pero si era nuevo en C #, entonces es fácil tropezar con esto.

Actualización: Recientemente descubrí que si agrego una carpeta App_Code a un proyecto, entonces debo cerrar / volver a abrir Visual Studio para que reconozca correctamente esta carpeta "especial".

AaronLS
fuente
1
Tenía algo que ver con la acción de compilación por su aspecto: la respuesta de FailBoy resolvió el problema. Gracias por responder de todos modos :)
Malachi
Agradable que funcionó cuando agregué un espacio de nombres a la clase en la carpeta App_Code.
mashtheweb
¿Por qué tenemos que incluir el namspace así? ¿Por qué intelliSense no puede acceder a esa clase sin especificar el nombre de la carpeta?
Elham Kohestani
10

Vaya a la página desde la que desea acceder a la clase App_code y luego agregue el espacio de nombres de la clase app_code. Debe proporcionar una usingdeclaración, de la siguiente manera:

using WebApplication3.App_Code;

Después de eso, deberá ir a la propiedad de la clase app_code y establecer la 'Acción de compilación' en 'Compilar'.

usuario3363647
fuente
4

asegúrese de estar usando el mismo espacio de nombres que sus páginas


fuente
1
¿Pero por qué cuando está en APP_CODE? ¡¿Pensé que cualquier cosa con clases PÚBLICAS debería exponerse automáticamente en toda la solución ?!
Fandango68
4

Todavía no he descubierto por qué ocurre esto, pero tenía clases que estaban en mi App_Codecarpeta que llamaban métodos entre sí, y lo hice bien cuando construí un proyecto .NET 4.5.2, pero luego tuve que revertirlo a 4.0 ya que el servidor de destino no se estaba actualizando. Fue entonces cuando encontré este problema (después de arreglar ellangversion en mi web.config de 6 a 5 ... otra historia) ...

Uno de mis métodos seguía teniendo un error como:

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

Todas mis clases ya estaban configuradas para "Compilar" en sus propiedades, como se sugiere en la respuesta aceptada aquí, y cada una tenía un espacio de nombres común que era el mismo, y cada uno tenía using MyNamespace;la parte superior de cada clase.

Descubrí que si solo movía las clases ofensivas que tenían que llamar métodos entre sí a otra carpeta estándar llamada algo diferente a "App_Code", dejaban de tener este problema de conflicto.

Nota : Si crea una carpeta estándar llamada "AppCode", mueva sus clases a ella, elimine la carpeta "App_Code", luego cambie el nombre de "AppCode" a "App_Code", sus problemas volverán. No importa si utiliza la opción "Nueva carpeta" o "Agregar carpeta ASP .NET" para crear "App_Code", parece que debe ingresar el nombre.

Tal vez esto sea solo un problema de .NET 4.0 (y posiblemente anterior) ... ¡Estaba bien en 4.5.2 antes de tener que volver!

vapcguy
fuente
0

Me resultó más fácil mover los archivos a un proyecto separado de la Biblioteca de clases y luego hacer referencia a ese proyecto en el proyecto web y aplicar el espacio de nombres en la usingsección del archivo. Por alguna razón, las otras soluciones no me funcionaban, pero este trabajo sí lo hizo.

Zarepheth
fuente
0

En mi caso, no pude obtener un proyecto para construir con clases definidas en la carpeta App_Code.

No puedo replicar el escenario precisamente para comentar, pero tuve que cerrar y volver a abrir el estudio visual para que intellisense cooperara de acuerdo ...

Me di cuenta de que cuando una clase en la carpeta App_Code se configura en 'Compilar' en lugar de 'Contenido' (haga clic con el botón derecho) que los errores provenían de una segunda versión de la clase ... Mire a la izquierda de la parte 3 de los 3 campos entre el panel de código y la pestaña. El 'otro' se llamaba algo similar a 10_App_Code o similar.

Para rectificar el problema, cambié el nombre de la carpeta de App_Code a Code, establecí explícitamente espacios de nombres en las clases y configuré todas las clases en 'Compilar'

hngr18
fuente