2008-09-16 12 views
122

¿Cuál es la diferencia entre CodeFile = "file.ascx.cs" y CodeBehind = "file.ascx.cs" en la declaración de un control de usuario ASP.NET?CodeFile vs CodeBehind

¿Es uno más nuevo o recomendado? ¿O tienen un uso específico?

Respuesta

149

CodeBehind: Necesita compilarse (modelo ASP.NET 1.1). El binario compilado se coloca en la carpeta bin del sitio web. Debe realizar una compilación en Visual Studio antes de implementar. Es un buen modelo cuando no desea que el código fuente pueda visualizarse como texto sin formato. Por ejemplo, cuando se lo entrega a un cliente al que no tiene la obligación de proporcionar el código.

CodeFile: Proporcione el archivo de origen con la solución para la implementación. ASP.NET 2.0 runtime compila el código cuando es necesario. Los archivos compilados están en Microsoft.NET [.NET version] \ Archivos temporales ASP.NET.

+2

Entonces, ¿esto significa que el desarrollador debe cambiar manualmente el atributo de la directiva de página o hay una forma de crear un proyecto web que selecciona codebehind o codefile, de forma predeterminada, cada vez que se agrega una nueva página web? –

+34

La forma en que lo veo es CodeFile está destinado a ser utilizado para un "Sitio web" y "Codebehind" está destinado a un "Proyecto de aplicación web", ya que debe compilarse. ¡Así que, al convertir un "sitio web" a un "proyecto de aplicación web", es posible que tengamos que cambiar manualmente todas las ocurrencias de CodeFile a Codebehind! – renegadeMind

+1

Los archivos de código son agradables durante el desarrollo porque puede probar los cambios después de simplemente guardar y actualizar una página y sin tener que crear su proyecto. Todavía puede opcionalmente "Publicar" los archivos del modelo de compilación .Net 2+ CodeFile como archivos DLL si no le gusta publicar archivos .cs y .vb en un servidor de producción. Cuando publique su proyecto, puede opcionalmente seleccionar las opciones de "Precompilación" para convertir uno o ambos archivos .aspx y .cs/.vb en archivos DLL, efectivamente como CodeBehind. – scradam

4

El archivo de código subyacente necesita compilar antes de ejecutarse, pero en src no necesitamos compilar y luego ejecutar ... solo guarde el archivo.

+1

'pero en src' - ¿Quiere decir' pero en CodeFile'? – mmcrae

3

Estoy trabajando con un Proyecto de aplicación en Visual Studio Express 2012 For Web y con .NET 4.0. En el código detrás de los archivos de mis páginas de inicio de sesión y cambio de contraseña encontré una situación en la que necesitaba tanto CodeBehind como CodeFile en la declaración.

Si no añado una referencia de archivo código como

CodeFile=login.aspx.cs 

La página Web no analiza y el navegador muestra un error de procesamiento. No importa si compilo el proyecto o no.

Si no añado un código detrás de referencia como

CodeBehind=login.aspx.cs 

Las referencias a clases de seguridad como MembershipUser fallan tanto en tiempo de compilación y al intentar utilizar IntelliSense con un error como "El tipo o espacio MembershipUser no puede ser encontrado". He agregado una referencia a System.Web.ApplicationServices según lo requerido por el marco .Net 4.0.

Debo agregar que estos archivos problemáticos se están ejecutando en una aplicación dentro del sitio web creado con la herramienta de aplicación IIS. Cuando abro el sitio web desde Visual Studio no tengo dificultad con los errores del analizador o de referencia. Esta confusión solo ocurre cuando abro la aplicación como un proyecto en Visual Studio.

+1

-1: interesante, tal vez, pero no responde la pregunta –

+0

Sé lo que quieres decir John. Y tal vez se merece el voto negativo, pero estoy luchando con este problema en este momento. Quizás mis dificultades no provengan de esta diferencia sino de otra cosa. Sin embargo, aunque la respuesta aceptada responde a la pregunta, no ayuda con el problema práctico que enfrento. Tal vez debería abrir una nueva pregunta. – DavidHyogo

Cuestiones relacionadas