Cuando inicio un nuevo proyecto ASP.NET en Visual Studio, puedo crear una aplicación web ASP.NET o puedo crear un sitio web ASP.NET.
¿Cuál es la diferencia entre la aplicación web ASP.NET y el sitio web ASP.NET? ¿Por qué elegiría uno sobre otro?
¿La respuesta es diferente según la versión de Visual Studio que estoy usando?
asp.net
.net
visual-studio
projects-and-solutions
Robert S.
fuente
fuente
Respuestas:
Sitio web:
El proyecto del sitio web se compila sobre la marcha. Terminas con muchos más archivos DLL, lo que puede ser una molestia. También da problemas cuando tiene páginas o controles en un directorio que necesitan hacer referencia a páginas y controles en otro directorio, ya que el otro directorio aún no puede compilarse en el código. Otro problema puede estar en la publicación.
Si a Visual Studio no se le dice que reutilice los mismos nombres constantemente, aparecerá nuevos nombres para los archivos DLL generados por las páginas todo el tiempo. Eso puede llevar a tener varias copias cercanas de archivos DLL que contienen el mismo nombre de clase, lo que generará muchos errores. El proyecto del sitio web se introdujo con Visual Studio 2005, pero resultó no ser popular.
Aplicación web:
El Proyecto de aplicación web se creó como un complemento y ahora existe como parte del SP 1 para Visual Studio 2005. Las principales diferencias son que el Proyecto de aplicación web fue diseñado para funcionar de manera similar a los proyectos web que se enviaron con Visual Studio 2003. Lo hará compile la aplicación en un solo archivo DLL en el momento de la compilación. Para actualizar el proyecto, debe volver a compilarse y publicarse el archivo DLL para que se produzcan cambios.
Otra buena característica del proyecto de aplicación web es que es mucho más fácil excluir archivos de la vista del proyecto. En el proyecto del sitio web, cada archivo que excluya se renombra con una palabra clave excluida en el nombre del archivo. En el Proyecto de aplicación web, el proyecto solo realiza un seguimiento de qué archivos incluir / excluir de la vista del proyecto sin renombrarlos, lo que hace las cosas mucho más ordenadas.
Referencia
El artículo ASP.NET 2.0 - Sitio web vs proyecto de aplicación web también da razones sobre por qué usar uno y no el otro. Aquí hay un extracto:
Proyectos de aplicaciones web versus proyectos de sitios web (MSDN) explica las diferencias entre el sitio web y los proyectos de aplicaciones web. Además, analiza la configuración que se realizará en Visual Studio.
fuente
El sitio web es lo que implementa en un servidor web ASP.NET como IIS. Solo un montón de archivos y carpetas. No hay nada en un sitio web que lo vincule a Visual Studio (no hay archivo de proyecto). La generación de código y la compilación de páginas web (como .aspx, .ascx, .master) se realizan dinámicamente en tiempo de ejecución , y el marco detecta los cambios en estos archivos y los vuelve a compilar automáticamente. Puede poner el código que desea compartir entre páginas en la carpeta especial App_Code, o puede precompilarlo y colocar el ensamblaje en la carpeta Bin.
Aplicación web es un proyecto especial de Visual Studio. La principal diferencia con los sitios web es que cuando construye el proyecto, todos los archivos de código se compilan en un solo ensamblaje, que se coloca en el directorio bin. No despliega archivos de código en el servidor web. En lugar de tener una carpeta especial para archivos de código compartido, puede colocarlos en cualquier lugar, tal como lo haría en la biblioteca de la clase. Debido a que las aplicaciones web contienen archivos que no están destinados a ser implementados, como archivos de proyecto y código, hay un comando Publicar en Visual Studio para enviar un sitio web a una ubicación específica.
App_Code vs Bin
La implementación de archivos de código compartido generalmente es una mala idea, pero eso no significa que tenga que elegir la aplicación web. Puede tener un sitio web que haga referencia a un proyecto de biblioteca de clases que contenga todo el código del sitio web. Las aplicaciones web son solo una forma conveniente de hacerlo.
Código detrás
Este tema es específico de los archivos .aspx y .ascx. Este tema es cada vez menos relevante en los nuevos marcos de aplicaciones, como ASP.NET MVC y páginas web ASP.NET que no utilizan archivos de código subyacente.
Al compilar todos los archivos de código en un solo ensamblaje, incluidos los archivos de código subyacente de las páginas .aspx y los controles .ascx, en las aplicaciones web debe volver a compilar para cada pequeño cambio, y no puede realizar cambios en vivo. Esto puede ser un verdadero dolor durante el desarrollo, ya que debe seguir reconstruyéndolo para ver los cambios, mientras que con los sitios web los cambios son detectados por el tiempo de ejecución y las páginas / controles se vuelven a compilar automáticamente.
Hacer que el tiempo de ejecución administre el código detrás de los ensamblados es menos trabajo para usted, ya que no necesita preocuparse por dar nombres únicos a las páginas / controles u organizarlos en diferentes espacios de nombres.
No digo que la implementación de archivos de código sea siempre una buena idea (especialmente no en el caso de archivos de código compartido), pero los archivos de código subyacente solo deben contener código que realice tareas específicas de la interfaz de usuario, controladores de eventos de conexión, etc. Su aplicación debe ser en capas para que el código importante siempre termine en la carpeta Bin. Si ese es el caso, la implementación de archivos de código subyacente no debe considerarse dañina.
Otra limitación de las aplicaciones web es que solo puede usar el idioma del proyecto. En los sitios web puede tener algunas páginas en C #, algunas en VB, etc. No es necesario un soporte especial de Visual Studio. Esa es la belleza de la extensibilidad del proveedor de compilación.
Además, en las aplicaciones web no obtiene detección de errores en las páginas / controles, ya que el compilador solo compila su código detrás de las clases y no el código de marcado (en MVC puede solucionar esto usando la opción MvcBuildViews), que se compila en tiempo de ejecución.
Estudio visual
Debido a que las aplicaciones web son proyectos de Visual Studio, obtiene algunas características que no están disponibles en los sitios web. Por ejemplo, puede usar eventos de compilación para realizar una variedad de tareas, por ejemplo, minificar y / o combinar archivos Javascript.
Otra buena característica introducida en Visual Studio 2010 es la transformación Web.config .
Esto tampoco está disponible en los sitios web.Ahora funciona con sitios web en VS 2013.Crear una aplicación web es más rápido que crear un sitio web, especialmente para sitios grandes. Esto se debe principalmente a que las aplicaciones web no compilan el código de marcado. En MVC, si configura MvcBuildViews en verdadero, compila el código de marcado y obtiene detección de errores, lo cual es muy útil. El inconveniente es que cada vez que crea la solución, construye el sitio completo, lo que puede ser lento e ineficiente, especialmente si no está editando el sitio. Me encuentro activando y desactivando MvcBuildViews (que requiere la descarga de un proyecto). Por otro lado, con los Sitios web puede elegir si desea construir el sitio como parte de la solución o no. Si elige no hacerlo, la construcción de la solución es muy rápida, y siempre puede hacer clic en el nodo Sitio web y seleccionar Construir, si ha realizado cambios.
En un proyecto de aplicación web MVC, tiene comandos y cuadros de diálogo adicionales para tareas comunes, como 'Agregar vista', 'Ir a vista', 'Agregar controlador', etc. Estos no están disponibles en un sitio web MVC.
Si usa IIS Express como servidor de desarrollo, en los sitios web puede agregar directorios virtuales. Esta opción no está disponible en aplicaciones web.
NuGet Package Restore no funciona en sitios web, debe instalar manualmente los paquetes enumerados en packages.configRestaurar paquete ahora funciona con sitios web que comienzan NuGet 2.7fuente
Sitio web = usar cuando el sitio web es creado por diseñadores gráficos y los programadores solo editan una o dos páginas
Aplicación web = se usa cuando los programadores crean la aplicación y los diseñadores gráficos solo editan una o dos páginas / imágenes.
Los sitios web se pueden trabajar con cualquier herramienta HTML sin tener que tener un estudio de desarrollo, ya que los archivos de proyecto no necesitan actualizarse, etc. Las aplicaciones web son mejores cuando el equipo usa principalmente el estudio de desarrollador y hay un alto contenido de código.
(Algunos errores de codificación se encuentran en las aplicaciones web en tiempo de compilación que no se encuentran en los sitios web hasta el tiempo de ejecución).
Advertencia: escribí esta respuesta hace muchos años y no he usado Asp.net desde entonces. Espero que las cosas ahora hayan avanzado.
fuente
A menos que tenga una necesidad específica de un proyecto compilado dinámicamente, no use un proyecto de sitio web .
¿Por qué? Porque el proyecto del sitio web lo llevará a la pared cuando intente cambiar o comprender su proyecto. Las características de búsqueda de escritura estática (p. Ej., Usos de búsqueda, refactorización) en Visual Studio se llevarán para siempre en cualquier proyecto de tamaño razonable. Para obtener más información, consulte la pregunta de desbordamiento de pila lenta "Buscar todas las referencias" en Visual Studio .
Realmente no puedo entender por qué eliminaron las aplicaciones web en Visual Studio 2005 para el tipo de proyecto de sitio web de carbuncle que produce dolor, sanidad y productividad.
fuente
Hay un artículo en MSDN que describe las diferencias:
Comparación de proyectos de sitios web y proyectos de aplicaciones web
Por cierto: hay algunas preguntas similares sobre ese tema, por ejemplo:
fuente
Esto puede sonar un poco obvio, pero creo que es algo que no se entiende porque Visual Studio 2005 solo se envió con el sitio web originalmente. Si su proyecto trata con un sitio web que es bastante limitado y no tiene mucha separación lógica o física, el sitio web está bien. Sin embargo, si es realmente una aplicación web con diferentes módulos donde muchos usuarios agregan y actualizan datos, es mejor que la aplicación web.
El mayor profesional del modelo de sitio web es que cualquier cosa en la
app_code
sección se compila dinámicamente. Puede realizar actualizaciones de archivos C # sin una nueva implementación completa. Sin embargo, esto viene con un gran sacrificio. Suceden muchas cosas debajo de las cubiertas que son difíciles de controlar. Los espacios de nombres son difíciles de controlar y el uso específico de DLL desaparece de forma predeterminada para cualquier cosa debajo,app_code
ya que todo se compila dinámicamente.El modelo de aplicación web no tiene una compilación dinámica, pero usted obtiene el control sobre las cosas que he mencionado.
Si está realizando un desarrollo de n niveles, le recomiendo el modelo de aplicación web. Si está haciendo un sitio web limitado o una implementación rápida y sucia, el modelo del sitio web puede tener ventajas.
Se puede encontrar un análisis más detallado en:
fuente
Del libro del examen 70-515 del kit de capacitación personal MCTS:
fuente
Depende de lo que estés desarrollando.
Un sitio web orientado al contenido tendrá su contenido cambiando con frecuencia y un sitio web es mejor para eso.
Una aplicación tiende a tener sus datos almacenados en una base de datos y sus páginas y código cambian raramente. En este caso, es mejor tener una aplicación web donde la implementación de ensamblados esté mucho más controlada y tenga un mejor soporte para las pruebas unitarias.
fuente
Project structure
También hay una diferencia en la estructura del proyecto. En la aplicación web tiene un archivo de proyecto tal como lo tenía en la aplicación normal. En el sitio web no hay un archivo de proyecto tradicional, todo lo que tiene es un archivo de solución. Todas las referencias y configuraciones se almacenan en el archivo web.config.@Page directive
Hay un atributo diferente en la directiva @Page para el archivo que contiene la clase asociada con esta página. En la aplicación web es estándar "CodeBehind", en el sitio web utiliza "CodeFile". Puede ver esto en los ejemplos a continuación:Aplicación web:
Sitio web:
fuente
Sí, la aplicación web es mucho mejor que los sitios web, porque las aplicaciones web nos dan libertad:
Tener múltiples proyectos bajo un mismo paraguas y establecer dependencias de proyectos entre ellos. Por ejemplo, para PCS podemos tener lo siguiente dentro de la aplicación web:
Para ejecutar pruebas unitarias en el código que está en los archivos de clase asociados con las páginas ASP.NET
fuente
Una de las diferencias clave es que los sitios web compilan dinámicamente y crean ensamblajes sobre la marcha. Las aplicaciones web se compilan en un gran ensamblaje.
La distinción entre los dos se ha eliminado en Visual Studio 2008.
fuente
Las aplicaciones generalmente se compilan antes de la implementación, ya que el sitio web utiliza el directorio app_code. Cuando algo cambia en la carpeta del código de la aplicación, el servidor volverá a compilar el código. Esto significa que puede agregar / cambiar código con un sitio web sobre la marcha.
La ventaja de una aplicación es que no hay que volver a compilar y, por lo tanto, los tiempos iniciales de inicio serán más rápidos.
fuente
Le recomiendo que vea el video Proyectos de aplicaciones web y proyectos de implementación web en el sitio web ASP.NET que explica la diferencia con gran detalle, fue bastante útil para mí.
Por cierto, no se confunda con el título, una gran parte del video explica la diferencia entre proyectos de sitios web y proyectos de aplicaciones web y por qué Microsoft reintrodujo proyectos de aplicaciones web en Visual Studio 2005 (como probablemente ya sepa, originalmente enviado solo con proyectos de sitios web, luego se agregaron proyectos de aplicaciones web en SP1). Un gran video que recomiendo para cualquiera que quiera saber la diferencia.
fuente
Un "sitio web" tiene su código en un directorio especial de App_Code y está compilado en varias DLL (ensamblados) en tiempo de ejecución. Una "aplicación web" está precompilada en una sola DLL.
fuente
Sitio web y sitio web de Project >> son dos métodos diferentes para crear aplicaciones ASP.NET utilizando Visual Studio. Uno no tiene proyectos y otro es el entorno del proyecto. Las diferencias son como
No hay mucha diferencia básica en el uso de cualquiera de los dos enfoques. Pero si está creando un sitio web que llevará más tiempo, opte por el entorno del proyecto.
fuente
Modelo de proyecto de aplicación web
Modelo de proyecto del sitio web
fuente
Siempre depende del requisito de su cliente. ASP.NET solo incluye características flexibles que el usuario necesita para la seguridad y el fácil mantenimiento de su aplicación.
Puede pensar en una aplicación web como un archivo binario que se ejecuta dentro del marco ASP.NET. Y los sitios web como una página web estática que puede revisar e implementar fácilmente el código fuente.
Pero las ventajas y desventajas de estas dos tecnologías ASP.NET son lo que es bueno.
fuente
Sitios web: no se creará ningún archivo de solución. Si queremos crear sitios web no necesitamos estudio visual.
Aplicación web: se creará un archivo de solución. Si queremos crear una aplicación web deberíamos necesitar el estudio visual. Creará un solo
.dll
archivo en la carpeta bin.fuente
En Proyectos de aplicaciones web, Visual Studio necesita archivos .designer adicionales para páginas y controles de usuario. Los proyectos del sitio web no requieren esta sobrecarga. El marcado en sí mismo se interpreta como el diseño.
fuente
Sitio web: genera la carpeta app_code automáticamente y si la publica en el servidor y luego si realiza algunos cambios en un archivo o página en particular, no tiene que compilar todos los archivos.
Aplicación web Genera automáticamente un archivo de soluciones que el sitio web no genera y, si cambia en un archivo, debe compilar el proyecto completo para reflejar sus cambios.
fuente
En una aplicación web, puede crear las capas de la funcionalidad de su proyecto y puede crear interdependencias entre ellas dividiéndolas en muchos proyectos, pero nunca puede hacerlo en un sitio web.
fuente
Definitivamente aplicación web, archivo DLL único y fácil de mantener. Pero un sitio web es más flexible; puede editar el archivo aspx sobre la marcha.
fuente
Las aplicaciones web requieren más memoria, presumiblemente porque no tiene más remedio que compilar en un solo ensamblaje. Acabo de convertir un sitio heredado grande en una aplicación web y tengo problemas con la falta de memoria, tanto en tiempo de compilación con el siguiente mensaje de error:
error, y en tiempo de ejecución con este mensaje de error como se muestra a continuación:
Mi recomendación para convertir sitios más grandes en hardware heredado con limitaciones de memoria es elegir la opción para volver al modelo de sitio web. Incluso después de un problema de éxito inicial podría aparecer más tarde.
fuente
Aquí la aplicación de soporte web es un ejemplo de sitio web. El sitio web y la aplicación web pueden ser dinámicos / estáticos, depende de los requisitos, aquí hay un ejemplo para comprender el funcionamiento del sitio web y la aplicación web.
fuente
Para resumir algunas de las respuestas anteriores:
Flexibilidad , ¿puedes hacer cambios en vivo a una página web?
Sitio web : posible. Pro: beneficios a corto plazo. Con: riesgo a largo plazo del caos del proyecto.
Aplicación web : Con: no es posible. Edite una página, archive los cambios en el control de origen, luego construya e implemente todo el sitio. Pro: mantener un proyecto de calidad.
Problemas de desarrollo
Sitio web : Estructura de proyecto simple sin un archivo .csproj. Dos páginas .aspx pueden tener el mismo nombre de clase sin conflictos. Nombre de directorio de proyecto aleatorio que conduce a errores de compilación como por qué .net framework entra en conflicto con su propio archivo generado y por qué .net framework entra en conflicto con su propio archivo generado . Pro: simple (simplista). Con: errático.
Aplicación web : estructura de proyecto similar al proyecto WebForms, con un archivo .csproj. Los nombres de clase de las páginas asp deben ser únicos. Pro: simple (inteligente). Con: ninguno, porque una aplicación web sigue siendo simple.
fuente