CodeFile vs CodeBehind


138

¿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?

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

Respuestas:


163

CodeBehind : debe 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 sea visible como texto sin formato. Por ejemplo, al entregar a un cliente a quien no tiene la obligación de proporcionar el código.

CodeFile : proporciona el archivo fuente con la solución para la implementación. El tiempo de ejecución de ASP.NET 2.0 compila el código cuando es necesario. Los archivos compilados se encuentran en Microsoft.NET [versión .NET] \ Archivos temporales ASP.NET.


2
Entonces, ¿esto significa que el desarrollador debe cambiar manualmente el atributo de la directiva de la página o hay una manera de crear un proyecto web que seleccione código subyacente o archivo de código, por defecto, cada vez que se agrega una nueva página web?
Matt W

38
La forma en que lo veo es que 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. Por lo tanto, al convertir un "sitio web" en un "proyecto de aplicación web", es posible que necesitemos cambiar manualmente todas las ocurrencias de CodeFile a Codebehind.
renegaMind

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

1
Como renegadeMind señaló (y de los votos positivos que recibe), creo que la respuesta debería editarse para enfatizar el hecho de que CodeFile está profundamente vinculado a la solución de tipo "sitio web", mientras que CodeBehind está vinculado a "proyecto de aplicación web" . Lamentablemente mi edición ha sido rechazada.
Frenchone

3
el hecho de que el código subyacente esté asociado con asp 1.1 mientras que el archivo de código está vinculado a asp.net 2.0 podría vincularse para pensar que el archivo de código es "superior" al código subyacente cuando no lo son (y en mi humilde opinión, esto es exactamente lo contrario: las aplicaciones web son mejores que los sitios web)
frenchone

5

El archivo Codebehind necesita compilarse antes de ejecutarse, pero en src no necesitamos compilar y luego ejecutar ... simplemente guarde el archivo.


1
but in src- quieres decir but in the CodeFile?
Don Cheadle

5

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

Si no agrego una referencia de archivo de código como

CodeFile=login.aspx.cs

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

Si no agrego un código detrás de referencia como

CodeBehind=login.aspx.cs

Las referencias a clases de seguridad como MembershipUser fallan tanto en el momento de la compilación como al intentar usar intellisense con un error como "No se puede encontrar el tipo o el espacio de nombres MembershipUser". He agregado una referencia a System.Web.ApplicationServices como lo requiere 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 dificultades con los errores del analizador o los errores de referencia. Esta confusión solo ocurre cuando abro la aplicación como un proyecto en Visual Studio.


1
Sé a qué te refieres, John. Y tal vez merezca el voto negativo, pero realmente estoy luchando con este problema en este momento. Quizás mis dificultades no provienen 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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.