una - ¿Sitio web ASP.NET o aplicación web ASP.NET?
visual basic proyectos hechos (25)
Cuando comienzo 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 una sobre otra?
¿La respuesta es diferente según la versión de Visual Studio que estoy usando?
Compilation
En primer lugar hay una diferencia en la compilación. El sitio web no está precompilado en el servidor, se compila en el archivo. Puede ser una ventaja porque cuando desee cambiar algo en su sitio web, simplemente puede descargar un archivo específico del servidor, cambiarlo y volver a cargarlo en el servidor y todo funcionará bien. En la aplicación web no puedes hacer esto porque todo está precompilado y terminas con una sola DLL. Cuando cambias algo en un archivo de tu proyecto, tienes que volver a compilar todo de nuevo. Entonces, si desea tener la posibilidad de cambiar algunos archivos en el sitio web del servidor, esta es la mejor solución para usted. También permite que muchos desarrolladores trabajen en un sitio web. Por otro lado, si no desea que su código esté disponible en el servidor, debería elegir la aplicación web. Esta opción también es mejor para la prueba de unidad porque se crea un archivo DLL después de publicar su sitio web.
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 usted usa "CodeFile". Puedes ver esto en los siguientes ejemplos:
Aplicación web:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs"
Inherits="WebApplication._Default" %>
Sitio Web:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
Espacios de nombres: en el ejemplo anterior también puede ver otra diferencia: cómo se crean los espacios de nombres. En el espacio de nombres de la aplicación web es simplemente un nombre del proyecto. En el sitio web hay un espacio de nombres predeterminado ASP para páginas compiladas dinámicamente.
Editar y continuar: en la aplicación web La opción Editar y continuar está disponible (para activarla, debe ir al menú Herramientas, hacer clic en Opciones y luego buscar Editar y continuar en la depuración). Esta función no funciona en el sitio web. ASP.NET MVCIf desea desarrollar aplicaciones web usando
ASP.NET MVC (Controlador de vista de modelo) la mejor y la opción predeterminada es la aplicación web. Aunque es posible usar MVC en el sitio web, no se recomienda.
Resumen: la compilación es la diferencia más importante entre la aplicación web ASP.NET y el sitio web. Por lo tanto, si trabaja en un proyecto más grande donde algunas personas pueden modificarlo, es mejor usar el sitio web. Pero si está haciendo un proyecto más pequeño, también puede usar la aplicación web.
A menos que tenga una necesidad específica para un proyecto compilado dinámicamente, no use un proyecto de sitio web .
¿Por qué? Debido a que el proyecto del sitio web lo llevará a la pared cuando intente cambiar o entender su proyecto. Las características de búsqueda de escritura estática (p. Ej., Encontrar usos, refactor) en Visual Studio tardarán una eternidad en cualquier proyecto de tamaño razonable. Para obtener más información, consulte la pregunta sobre el desbordamiento de pila Lenta "Buscar todas las referencias" en Visual Studio .
Realmente no puedo ver por qué abandonaron las aplicaciones web en Visual Studio 2005 para el tipo de proyecto de sitio web de productividad que induce el dolor, que drena la cordura y reduce la productividad.
Definitivamente una aplicación web, un archivo DLL único y fácil de mantener. Pero un sitio web es más flexible; Puede editar el archivo aspx sobre la marcha.
Del libro de examen de autoaprendizaje MCTS 70-515 libro:
Con aplicación web (proyecto),
- Puede crear una aplicación MVC.
- Visual Studio almacena la lista de archivos en un archivo de proyecto (.csproj o .vbproj), en lugar de confiar en la estructura de carpetas.
- No puedes mezclar Visual Basic y C #.
- No puede editar código sin detener una sesión de depuración.
- Puede establecer dependencias entre múltiples proyectos web.
- Debe compilar la aplicación antes de la implementación, lo que le impide probar una página si otra página no se compila.
- No es necesario almacenar el código fuente en el servidor.
- Puedes controlar el nombre y la versión del ensamblaje.
- No puede editar archivos individuales después de la implementación sin volver a compilar.
Depende de lo que estés desarrollando.
Un sitio web orientado al contenido cambiará su contenido 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ódigos cambian raramente. En este caso, es mejor tener una aplicación web donde el despliegue de ensamblajes esté mucho más controlado y tenga mejor soporte para la prueba de unidades.
En los proyectos de aplicaciones web, Visual Studio necesita archivos .designer adicionales para las páginas y los controles del usuario. Los proyectos de sitios web no requieren esta sobrecarga. El marcado en sí se interpreta como el diseño.
En una aplicación web, puede crear las capas de la funcionalidad de su proyecto y puede crear interdependencias entre ellas al dividirla en muchos proyectos, pero nunca puede hacer esto en un sitio web.
Esto puede parecer un poco obvio, pero creo que es algo que se malinterpreta porque Visual Studio 2005 solo se distribuyó 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, estará mejor con la aplicación web.
El mayor pro del modelo de sitio web es que cualquier elemento en la sección app_code
se compila dinámicamente. Puede realizar actualizaciones de archivos C # sin un nuevo despliegue completo. Sin embargo esto viene en un gran sacrificio. Muchas cosas suceden bajo las cubiertas que son difíciles de controlar. Los espacios de nombres son difíciles de controlar y el uso específico de DLL sale de la ventana de forma predeterminada para cualquier cosa bajo 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á realizando un sitio web limitado o una implementación rápida y sucia, el modelo del sitio web puede tener ventajas.
Un análisis más detallado se puede encontrar en:
Hay un artículo en MSDN que describe las diferencias:
Comparación de proyectos de sitios web y proyectos de aplicaciones web
BTW: hay algunas preguntas similares sobre ese tema, por ejemplo:
- Sitio web frente a la aplicación web ASP.Net en Visual Studio nota: se eliminó, ya no está en SO
- Sitio web o aplicación web en .ASP.NET
Las aplicaciones generalmente se compilan antes de la implementación, donde el sitio web hace uso del directorio app_code. Cuando algo cambie en la carpeta del código de la aplicación, el servidor volverá a compilar el código. Esto significa que puede agregar / cambiar el código con un sitio web sobre la marcha.
La ventaja de una aplicación es que no hay que volver a compilar, por lo que los tiempos de inicio iniciales serán más rápidos.
Las aplicaciones web requieren más memoria, probablemente 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 para quedarme sin memoria, tanto en tiempo de compilación con el mensaje de error como se muestra a continuación:
Unexpected error writing metadata to file '''' --
Not enough storage is available to complete this operation.
error, y en tiempo de ejecución con este mensaje de error como se muestra a continuación:
Exception information:
Exception type: HttpException
Exception message: Exception of type ''System.OutOfMemoryException'' was thrown.
at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
Mi recomendación para convertir sitios más grandes en hardware heredado con memoria limitada 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.
Le recomiendo que vea el video Proyectos de aplicaciones web y proyectos de implementación web en el sitio web de ASP.NET, lo que explica la diferencia con gran detalle, ya que fue muy útil para mí.
Por cierto, no se confunda con el título, una gran parte del video explica la diferencia entre los proyectos de sitios web y los proyectos de aplicaciones web y por qué Microsoft volvió a presentar los proyectos de aplicaciones web en Visual studio 2005 (como probablemente ya sepa, originalmente enviado solo con proyectos de sitio web, luego se agregaron proyectos de aplicación web en SP1). Un gran video que recomiendo a cualquiera que quiera saber la diferencia.
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. Contras: 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 genere 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 porque .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). Contras: ninguna, porque una aplicación web sigue siendo simple.
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 paraguas y establecer dependencias entre proyectos. Por ejemplo, para PCS podemos tener seguimiento dentro de la aplicación web.
- Portales web
- Controlador de notificaciones (para enviar email)
- Capa de negocios
- Capa de acceso a datos
- Administrador de excepciones
- Utilidad de servidor
- Servicios WCF (comunes para todas las plataformas)
- Elemento de lista
Para ejecutar pruebas unitarias en el código que se encuentra en los archivos de clase asociados con las páginas ASP.NET
- Para referirse a las clases que están asociadas con páginas y controles de usuario de clases independientes
- Para crear un único conjunto para todo el sitio.
- Control sobre el nombre del ensamblado y el número de versión que se genera para el sitio
- Para evitar poner código fuente en un servidor de producción. (Puede evitar la implementación del código fuente en el servidor IIS. En algunos escenarios, como los entornos de alojamiento compartido, es posible que le preocupe el acceso no autorizado al código fuente en el servidor IIS. (Para un proyecto de sitio web, puede evitar este riesgo precompilar en una computadora de desarrollo e implementar los ensamblados generados en lugar del código fuente. Sin embargo, en ese caso, pierde algunos de los beneficios de las actualizaciones fáciles del sitio.
- Problema de rendimiento con el sitio web (la primera solicitud al sitio web puede requerir que se compile el sitio, lo que puede resultar en un retraso. Y si el sitio web se ejecuta en un servidor IIS que tiene poca memoria, incluido todo el sitio en una un solo ensamblaje podría usar más memoria de la que se necesitaría para varios ensamblajes.)
Siempre depende del requerimiento de su cliente. ASP.NET solo incluye las funciones 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 en la que puede revisar e implementar fácilmente el código fuente.
Pero las ventajas y desventajas de estas dos tecnologías ASP.NET vienen bien.
Sitio web y el sitio web de Project >> son dos métodos diferentes para crear una aplicación ASP.NET utilizando Visual Studio. Uno es sin proyecto y otro es el entorno del proyecto. Las diferencias son como
- El archivo de solución se almacena en el mismo directorio que el directorio raíz en el entorno del proyecto.
- Es necesario eliminar los archivos de soluciones y proyectos antes de implementar en el entorno del proyecto.
- El directorio raíz completo se implementa en un entorno sin proyecto.
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.
Sitios web: no se creará ningún archivo de solución. Si queremos crear sitios web no hace falta ningún 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 archivo .dll
en la carpeta bin.
Un "sitio web" tiene su código en un directorio especial de código de aplicación y se compila en varias DLL (ensamblajes) en tiempo de ejecución. Una "aplicación web" se precompila en una sola DLL.
Una de las diferencias clave es que los sitios web se compilan dinámicamente y crean ensamblajes sobre la marcha. Las aplicaciones web se compilan en un ensamblaje grande.
La distinción entre los dos se ha eliminado en Visual Studio 2008.
Sitio web: Genera automáticamente la carpeta app_code y si la publica en el servidor y luego si realiza algunos cambios en cualquier archivo o página en particular, no tiene que compilar todos los archivos.
Aplicación web Genera automáticamente el archivo de soluciones que el sitio web no genera y si cambia en un archivo, debe compilar el proyecto completo para reflejar los cambios.
Modelo de proyecto de aplicación web
- Proporciona la misma semántica de proyectos web que los proyectos web de Visual Studio .NET. Tiene un archivo de proyecto (estructura basada en archivos de proyecto). Modelo de compilación: todo el código del proyecto se compila en un único ensamblaje. Admite tanto IIS como el servidor de desarrollo ASP.NET incorporado. Admite todas las funciones de Visual Studio 2005 (refactorización, genéricos, etc.) y de ASP.NET (páginas maestras, membresía e inicio de sesión, navegación del sitio, temas, etc.). Usar las Extensiones de servidor de FrontPage (FPSE) ya no es un requisito.
Modelo de proyecto de sitio web
- Ningún archivo de proyecto (basado en el sistema de archivos).
- Nuevo modelo de compilación.
- Compilación dinámica y trabajo en páginas sin crear un sitio completo en cada vista de página.
- Admite tanto IIS como el servidor de desarrollo ASP.NET incorporado.
- Cada página tiene su propio montaje.
- Código de código diferente.
Sitio web:
El proyecto del sitio web se compila sobre la marcha. Usted termina con muchos más archivos DLL, lo que puede ser un dolor. 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 es posible que el otro directorio aún no esté compilado 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á nombres nuevos para los archivos DLL generados por las páginas todo el tiempo. Eso puede llevar a tener varias copias cercanas de archivos DLL que contengan 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 extremadamente 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. 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 el archivo DLL debe publicarse para que se produzcan los cambios.
Otra característica interesante 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, se cambia el nombre de cada archivo que excluye con una palabra clave excluida en el nombre del archivo. En el Proyecto de aplicación web, el proyecto simplemente realiza un seguimiento de qué archivos incluir / excluir de la vista del proyecto sin cambiar su nombre, lo que hace que las cosas sean mucho más ordenadas.
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 de esto:
- ¿Necesita migrar grandes aplicaciones de Visual Studio .NET 2003 a VS 2005? utilizar el proyecto de aplicación web.
- ¿Desea abrir y editar cualquier directorio como un proyecto web sin crear un archivo de proyecto? utilizar el proyecto de sitio web.
- ¿Necesita agregar pasos previos a la compilación y posteriores a la compilación durante la compilación? utilizar el proyecto de aplicación web.
- ¿Necesita crear una aplicación web utilizando varios proyectos web? utilizar el proyecto de aplicación web.
- ¿Quieres generar un montaje para cada página? utilizar el proyecto de sitio web.
- ¿Prefiere la compilación dinámica y trabajar en páginas sin crear un sitio completo en cada vista de página? utilizar el proyecto de sitio web.
- ¿Prefiere el modelo de código de una página al modelo de código subyacente? utilizar el proyecto de sitio web.
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.
Sitio web = uso cuando los diseñadores gráficos crean el sitio web y los programadores solo editan una o dos páginas
Aplicación web = uso cuando los programadores crean la aplicación y los diseñadores gráficos solo editan una o dos páginas / imágenes.
Se puede trabajar con los sitios web utilizando cualquier herramienta HTML sin tener que tener un estudio de desarrollador, ya que los archivos del proyecto no necesitan actualizarse, etc. Las aplicaciones web son mejores cuando el equipo utiliza mayormente el estudio de desarrollador y hay un alto contenido de código.
(Algunos errores de codificación se encuentran en aplicaciones web en el momento de la 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 se hayan movido ahora.
Sitio web es lo que implementa en un servidor web ASP.NET como IIS. Sólo un montón de archivos y carpetas. No hay nada en un sitio web que lo vincule con Visual Studio (no hay un archivo de proyecto). La generación de código y la compilación de páginas web (como .aspx, .ascx, .master) se realiza dinámicamente en tiempo de ejecución , y el marco detecta los cambios en estos archivos y los vuelve a compilar automáticamente. Puede colocar 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.
La aplicación web es un proyecto especial de Visual Studio. La principal diferencia con los sitios web es que cuando compila el proyecto, todos los archivos de código se compilan en un único ensamblaje, que se coloca en el directorio bin. No implementas archivos de código en el servidor web. En lugar de tener una carpeta especial para archivos de código compartidos, puede colocarlos en cualquier lugar, como lo haría en la biblioteca de clases. Debido a que las aplicaciones web contienen archivos que no están destinados a ser implementados, como los archivos de proyecto y código, hay un comando Publish 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 ASP.NET Web Pages que no utilizan archivos de código.
Al tener todos los archivos de código compilados en un solo ensamblaje, incluidos los archivos de codebehind de las páginas .aspx y los controles .ascx, en las aplicaciones web debe reconstruir cada pequeño cambio y no puede realizar cambios en vivo. Esto puede ser un verdadero problema durante el desarrollo, ya que tiene que seguir reconstruyendo para ver los cambios, mientras que los sitios web detectan cambios en el tiempo de ejecución y las páginas / controles se compilan automáticamente.
Hacer que el tiempo de ejecución administre los ensamblajes de código de código es menos trabajo para usted, ya que no necesita preocuparse por dar nombres / controles únicos a las páginas / controles, u organizarlos en diferentes espacios de nombres.
No estoy diciendo que implementar archivos de código sea siempre una buena idea (especialmente no en el caso de archivos de código compartidos), pero los archivos de código adjunto solo deben contener código que realice tareas de IU específicas, controladores de eventos de cableado, 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 los archivos de código no debería considerarse dañina.
Otra limitación de las aplicaciones web es que solo puede utilizar 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 sus clases de código y no el código de marca (en MVC puede solucionarlo con 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, minimizar y / o combinar archivos de Javascript.
Otra característica interesante 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 true, se compila el código de marcado y se obtiene la detección de errores, que es muy útil. La desventaja es que cada vez que crea la solución, crea el sitio completo, lo que puede ser lento e ineficiente, especialmente si no está editando el sitio. Me encuentro activando y desactivando MvcBuildViews (lo que requiere una descarga del 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 Generar, si ha realizado cambios.
En un proyecto de aplicación web de MVC, tiene comandos y cuadros de diálogo adicionales para tareas comunes, como ''Agregar vista'', ''Ir a vista'', ''Agregar controlador'', etc. No están disponibles en un sitio web de 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, tiene que instalar manualmente los paquetes listados en packages.config La restauración de paquetes ahora funciona con sitios web que inician NuGet 2.7