2009-08-03 20 views
159

He creado un sitio web en ASP.NET y he creado una clase y la he puesto dentro de la carpeta App_Code. Sin embargo, no puedo acceder a esto desde mis otras páginas. ¿Hay que configurar algo para permitir esto? Lo he hecho funcionar en proyectos anteriores, pero no en este, de alguna manera.Las clases que residen en App_Code no son accesibles

namespace CLIck10.App_Code 
{ 
    public static class Glob 
    { 
     ... 
    } 
} 
+1

Asumo que estás incluyendo el espacio de nombres en sus páginas web? –

+1

Posible duplicado - http://stackoverflow.com/questions/409070/accessing-a-class-that-is-not-declared-in-app-code-in-asp-net/37838458#37838458 – vapcguy

Respuesta

504

Haga clic derecho sobre el archivo en la carpeta .csApp_Code y comprobar sus propiedades.

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

+10

¿Cómo se puede configurar? esto como la acción de compilación por defecto? ¿o tengo que hacer eso para cada archivo en la carpeta App_Code? – Malachi

+1

@Malachi: debe ser la acción predeterminada en esa carpeta. ¿Cómo le estás agregando clases? –

+3

¿Por qué no puedo hacer esto en Visual Studio 2012? –

13

poner esto en la parte superior de los otros archivos en los que desee acceder a la clase:

using CLIck10.App_Code; 

O acceder a la clase de otros archivos de la siguiente manera:

CLIck10.App_Code.Glob 

No estoy seguro si esa es su problema o no, pero si eres 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".

+1

. Tenía que ver con la acción de compilación por su apariencia. La respuesta de FailBoy resolvió el problema. Gracias por responder de todos modos :) – Malachi

+0

Bueno que funcionó ya que agregué un espacio de nombres a la clase en la carpeta App_Code. – mashtheweb

+0

¿Por qué tenemos que incluir el namspace así? ¿Por qué intelliSense no puede acceder a esa clase sin especificar el nombre de la carpeta? –

4

asegúrese de que está utilizando el mismo espacio de nombres que sus páginas

+0

¿Pero por qué cuando está en APP_CODE? ¿Pensé que cualquier cosa allí con las clases PÚBLICAS debería estar expuesta en toda la solución automáticamente? – Fandango68

10

Ir a la página desde la que desea acceder a la clase App_Code, y luego añadir el espacio de nombres de la clase App_Code. Es necesario proporcionar una declaración using, de la siguiente manera:

using WebApplication3.App_Code; 

Después de eso, tendrá que ir a la propiedad de clase App_Code y establecer el 'Construir Acción' a 'Compilar'.

0

Me pareció más fácil mover los archivos a un proyecto de biblioteca de clases por separado y luego hacer referencia a ese proyecto en el proyecto web y aplicar el espacio de nombres en la sección using del archivo. Por alguna razón, las otras soluciones no funcionaban para mí, pero este trabajo fue satisfactorio.

3

No he descubierto todavía por qué ocurre esto, pero tenía clases que estaban en mi carpeta App_Code que llamaban métodos entre sí, y estaban bien al hacer esto cuando construí un proyecto .NET 4.5.2, pero luego tuve que volver a 4.0 ya que el servidor de destino no se estaba actualizando. Fue entonces cuando me encontré con este problema (después de la fijación de la langversion en mi web.config de 6 a 5 ... otra historia) ....

Uno de mis métodos mantenían tener 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 una tenía using MyNamespace; en 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 distinta a "App_Code", dejaban de tener este problema de conflicto.

Nota: Si crea una carpeta estándar llamada "AppCode", mueva sus clases en ella, eliminar la carpeta "App_Code", a continuación, cambiar el nombre de "AppCode" a "App_Code", sus problemas volverán. No importa si usa la opción "Nueva carpeta" o "Agregar carpeta ASP .NET" para crear "Código_aplicación", parece que ingresa el nombre.

Quizás esto sea solo un problema de .NET 4.0 (y posiblemente antes) ... ¡Estaba bien en 4.5.2 antes de tener que revertir!

0

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

No se puede reproducir el escenario, precisamente, hacer comentarios, pero tuvo que cerrar y Visual Studio re-abierto para intellisense de cooperar de acuerdo ...

he notado que cuando una clase en la carpeta App_Code se establece para 'Compilar' en lugar de 'Contenido' (haga clic con el botón derecho sobre él) que los errores provienen de una segunda versión de la clase ... Mire hacia la izquierda de los 3 de los 3 campos entre el panel de códigos y la pestaña . Al 'otro' se le llamó algo parecido a 10_App_Code o similar.

Para corregir el problema, Me cambió el nombre de la carpeta de App_Code al Código, establecer explícitamente los espacios de nombres en las clases y establecer todas las clases a 'Compilar'

Cuestiones relacionadas