Sitio web ASP.NET o aplicación web ASP.NET?


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?


Answers



Sitio web:

El proyecto del sitio web se compila sobre la marcha. Terminas con muchos más archivos DLL, lo que puede ser un problema. También da problemas cuando tienes páginas o controles en un directorio que necesitan referenciar páginas y controles en otro directorio, ya que el otro directorio aún no se puede compilar en el código. Otro problema puede ser la publicación.

Si no se le dice a Visual Studio que reutilice los mismos nombres constantemente, se crearán 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 contengan el mismo nombre de clase, lo que generará muchos errores. El proyecto del sitio web se presentó con Visual Studio 2005, pero resultó no ser muy 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. compila la aplicación en un solo archivo DLL en tiempo de compilación. Para actualizar el proyecto, se debe volver a compilar y se debe publicar el archivo DLL para que se realicen los 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 excluye se renombra con una palabra clave de exclusión en el nombre del archivo. En el proyecto de aplicación web, el proyecto simplemente realiza un seguimiento de los archivos que se incluyen / excluyen de la vista del proyecto sin cambiar el nombre de ellos, 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 explica por qué usar uno y no el otro. Aquí hay un extracto de esto:

  • ¿Necesita migrar aplicaciones grandes de Visual Studio .NET 2003 a VS 2005? usa 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 del sitio web.
  • ¿Necesita agregar pasos de precompilación y postconstrucción durante la compilación? utilizar proyecto de aplicación web.
  • ¿Necesita construir una aplicación web usando múltiples proyectos web? utilizar proyecto de aplicación web.
  • ¿Desea generar un ensamblaje para cada página? utilizar el proyecto del sitio web.
  • ¿Prefiere la compilación dinámica y el trabajo en páginas sin construir todo el sitio en cada vista de página? utilizar el proyecto del sitio web.
  • ¿Prefiere el modelo de código de una sola página para el modelo de código subyacente? utilizar el proyecto del sitio web.

Los proyectos de aplicaciones web frente a los proyectos de sitios web (MSDN) explican las diferencias entre el sitio web y los proyectos de aplicaciones web. Además, analiza la configuración que se realizará en Visual Studio.




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 con Visual Studio (no hay ningún 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 Código_aplicaciones, o puede precompilarlo y colocarlo en la carpeta Bin.

La aplicación web es un proyecto especial de Visual Studio. La principal diferencia con los sitios web es que, al construir el proyecto, todos los archivos de código se compilan en un solo ensamblaje, que se coloca en el directorio bin. No implementa 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 deben implementarse, como los archivos de proyecto y de código, existe un comando de publicación en Visual Studio para generar un sitio web en 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 clase 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 frameworks de aplicaciones como ASP.NET MVC y ASP.NET Web Pages que no usan código detrás de los archivos.

Al tener todos los archivos de código compilados en un único ensamblaje, incluido el código detrás de los archivos 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 tiempo real. Esto puede ser un verdadero problema durante el desarrollo, ya que debe seguir reconstruyendo 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 los ensamblados de código subyacente es menos trabajo para usted, ya que no tiene que preocuparse por darles a las páginas / controles nombres únicos u organizarlos en diferentes espacios de nombres.

No digo que implementar archivos de código siempre es una buena idea (especialmente no en el caso de archivos de códigos compartidos), pero los archivos de código subyacente solo deben contener código que realice tareas específicas de UI, manejadores de eventos cableados, 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 perjudicial.

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 necesita soporte especial de Visual Studio. Esa es la belleza de la extensibilidad del proveedor de compilación.

Además, en las aplicaciones web no obtienes detección de errores en páginas / controles ya que el compilador solo compila tu código detrás de las clases y no el código de marcado (en MVC puedes arreglar 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, usted 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 Javascript.

Otra buena característica presentada 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 construir 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 como verdadero, compilará el código de marcado y obtendrá la detección de errores, que es muy útil. El inconveniente es que cada vez que construyes la solución construye el sitio completo, que puede ser lento e ineficiente, especialmente si no estás editando el sitio. Me encuentro activando y desactivando MvcBuildViews (lo que requiere la descarga de un proyecto). Por otro lado, con sitios web puede elegir si desea construir el sitio como parte de la solución o no. Si elige no hacerlo, la creación de la solución es muy rápida, y siempre puede hacer clic en el nodo del sitio web y seleccionar Crear, si ha realizado cambios.

En un proyecto de aplicación web MVC, tiene comandos y diálogos adicionales para tareas comunes, como 'Agregar vista', 'Ir a vista', 'Agregar controlador', etc. Estos no están disponibles en un sitio web de MVC.

Si usa IIS Express como servidor de desarrollo, en Sitios web puede agregar directorios virtuales. Esta opción no está disponible en las aplicaciones web.

NuGet Package Restore no funciona en sitios web, debe instalar manualmente los paquetes enumerados en packages.config La restauración de paquetes ahora funciona con sitios web a partir de NuGet 2.7




Sitio web = uso cuando el sitio web es creado por diseñadores gráficos y los programadores solo editan una o dos páginas

Aplicación web = uso cuando la aplicación es creada por programadores y los diseñadores gráficos solo editan una o dos páginas / imágenes.

Los sitios web se pueden usar para usar cualquier herramienta HTML sin tener que tener Developer Studio, ya que no es necesario actualizar los archivos del proyecto, etc. Las aplicaciones web son mejores cuando el equipo usa principalmente el desarrollador de estudio 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 momento de la ejecución).

Advertencia: escribí esta respuesta hace muchos años y no he usado Asp.net desde entonces. Espero que las cosas hayan cambiado.




A menos que tenga una necesidad específica de un proyecto dinámicamente compilado, no use un proyecto de sitio web .

¿Por qué? Porque el proyecto del sitio web lo llevará por la pared cuando intente cambiar o entender su proyecto. Las características de búsqueda de tipado estático (por ejemplo, encontrar usos, refactor) en Visual Studio tomará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 que causa dolor, agota la cordura y aumenta la productividad.







Esto puede sonar un poco obvio, pero creo que es algo que no se comprende bien porque Visual Studio 2005 solo se envió originalmente con el sitio web. 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 se trata realmente de una aplicación web con diferentes módulos donde muchos usuarios agregan y actualizan datos, es mejor que estés con la aplicación web.

El mayor profesional del modelo de sitio web es que cualquier elemento de la sección app_code se compila dinámicamente. Puede realizar actualizaciones de archivos C sin una redistribución completa. Sin embargo, esto viene en un gran sacrificio. Muchas cosas pasan 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 por la ventana de forma predeterminada para todo lo que se encuentra en app_code ya que todo se compila dinámicamente.

El modelo de aplicación web no tiene compilación dinámica, pero usted obtiene control sobre las cosas que he mencionado.

Si está desarrollando n-tier, 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:




Del libro de entrenamiento autodirigido MCTS examen 70-515 libro:

Con la aplicación web (proyecto),

  1. Puede crear una aplicación MVC.
  2. Visual Studio almacena la lista de archivos en un archivo de proyecto (.csproj o .vbproj), en lugar de depender de la estructura de la carpeta.
  3. No puedes mezclar Visual Basic y C #.
  4. No puede editar el código sin detener una sesión de depuración.
  5. Puede establecer dependencias entre múltiples proyectos web.
  6. Debe compilar la aplicación antes de la implementación, lo que le impide probar una página si no se compilará otra página.
  7. No tiene que almacenar el código fuente en el servidor.
  8. Puede controlar el nombre y la versión del ensamblaje.
  9. 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 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ó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 las pruebas unitarias.




Compilation En primer lugar, hay una diferencia en la compilación. El sitio web no está precompilado en el servidor, se compila en un archivo. Puede ser una ventaja, porque cuando desea cambiar algo en su sitio web, puede simplemente descargar un archivo específico del servidor, cambiarlo y cargar este archivo al servidor y todo funcionaría bien. En la aplicación web, no puedes hacer esto porque todo está precompilado y terminas con solo una dll. Cuando cambias algo en un archivo de tu proyecto, debes volver a compilar todo. Entonces, si desea tener la posibilidad de cambiar algunos archivos en el sitio web del servidor, es una 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 Aplicación web. Esta opción también es mejor para Unit Testing debido a que se creó 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 como el que 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 a esta página. En la aplicación web, es estándar "CodeBehind", en el sitio web utiliza "CodeFile". Puedes ver esto en los ejemplos a continuación:

Web Application:

<%@ 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, puede ver también 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 ASP de espacio de nombres predeterminado para páginas compiladas dinámicamente.

Editar y continuar: en la aplicación web, las opciones Editar y Continuar están disponibles (para activarlo, debe ir al menú Herramientas, hacer clic en Opciones, luego buscar Editar y Continuar en la depuración). Esta característica no funciona en el sitio web. ASP.NET MVCIf desea desarrollar aplicaciones web usando

ASP.NET MVC (Model View Controller) la mejor y la opción predeterminada es la Aplicación web. Aunque es posible usar MVC en el sitio web, no es recomendable.

Resumen: la diferencia más importante entre la aplicación web ASP.NET y el sitio web es la compilación. Entonces, si trabajas 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.




Una de las principales diferencias es que los sitios web se compilan dinámicamente y crean ensamblajes sobre la marcha. Las aplicaciones web se compilan en una gran asamblea.

La distinción entre los dos se ha eliminado en Visual Studio 2008.




Sí, la aplicación web es mucho mejor que los sitios web, porque las aplicaciones web nos dan libertad:

  1. Tener múltiples proyectos bajo un paraguas y establecer dependencias de proyecto entre. Por ejemplo, para PCS podemos tener seguimiento dentro de la aplicación web:

    • Portales web
    • Controlador de notificaciones (para enviar correos electrónicos)
    • Capa empresarial
    • Capa de acceso a datos
    • Administrador de excepciones
    • Utilidad del servidor
    • Servicios WCF (común para todas las plataformas)
    • Artículo de lista
  2. Para ejecutar pruebas unitarias en el código que está en los archivos de clase que están asociados con las páginas ASP.NET

  3. Para hacer referencia a las clases que están asociadas con páginas y controles de usuario de clases independientes
  4. Para crear un ensamblaje único para todo el sitio
  5. Controlar el nombre del ensamblado y el número de versión que se genera para el sitio
  6. Para evitar colocar código fuente en un servidor de producción. (Puede evitar implementar código fuente en el servidor IIS. En algunos escenarios, como entornos de alojamiento compartido, puede 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 compilando previamente en una computadora de desarrollo y desplegando los ensamblajes generados en lugar del código fuente. Sin embargo, en ese caso, usted pierde algunos de los beneficios de las actualizaciones fáciles del sitio).
  7. Problema de rendimiento con el sitio web (La primera solicitud al sitio web puede requerir la compilación del sitio, lo que puede ocasionar un retraso. Y si el sitio web se ejecuta en un servidor IIS que tiene poca memoria, incluido todo el sitio en un un solo ensamblaje podría usar más memoria de la que se requeriría para ensamblajes múltiples.)



Las aplicaciones generalmente se compilan antes de la implementación cuando 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 se vuelve a compilar y, por lo tanto, los tiempos de inicio serán más rápidos.




Te recomiendo que veas el video Proyectos de aplicación web y proyectos de implementación web en el sitio web de ASP.NET, que explica la diferencia en gran detalle, fue bastante útil para mí.

Por cierto, no te confundas por 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 reintrodujo los proyectos de aplicaciones web en Visual Studio 2005 (como probablemente ya sabes, originalmente enviado con solo proyectos de sitios web, luego se agregaron proyectos de aplicaciones web en SP1). Un gran video que recomiendo encarecidamente a cualquiera que quiera saber la diferencia.




Un "sitio web" tiene su código en un directorio especial App_Code y se compila en varios archivos DLL (ensamblados) en tiempo de ejecución. Una "aplicación web" se precompila en una sola DLL.




El sitio web del sitio web y del proyecto >> son dos métodos diferentes para crear aplicaciones ASP.NET utilizando Visual Studio. Uno es sin proyecto y otro es el entorno del proyecto. Las diferencias son como

  1. El archivo de la solución se almacena en el mismo directorio que el directorio raíz en el entorno del proyecto.
  2. Necesita eliminar los archivos de solución y proyecto antes de implementarlos en el entorno del proyecto.
  3. El directorio raíz completo se implementa en un entorno sin proyectos.

no hay mucha diferencia básica en el uso de cualquiera de los enfoques. Pero si está creando un sitio web que llevará más tiempo, opte por el entorno del proyecto.




Modelo de proyecto de aplicación web

  • Proporciona la misma semántica de proyecto 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 solo ensamblaje. Admite IIS y el servidor de desarrollo ASP.NET incorporado. Admite todas las características 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.). El uso de las Extensiones de servidor de FrontPage (FPSE) ya no es un requisito.

Modelo de proyecto del sitio web

  • Sin 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 todo el sitio en cada vista de página.
  • Admite IIS y el servidor de desarrollo ASP.NET incorporado.
  • Cada página tiene su propio ensamblaje.
  • Modelo de código defferent.



Siempre depende de los requisitos 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 sitios web como una página web estática que puede revisar e implementar fácilmente el código fuente.

Pero la ventaja y las desventajas de estas dos tecnologías ASP.NET vienen lo bueno.




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í se interpreta como el diseño.




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, entonces 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 sus cambios.




Las aplicaciones web requieren más memoria, presumiblemente porque no tiene más remedio que compilar en un solo ensamblaje. Acabo de convertir un gran sitio heredado a una aplicación web y tengo problemas con la falta de memoria, tanto en tiempo de compilación con el

Unexpected error writing metadata to file '' -- 
Not enough storage is available to complete this operation. 

error y en tiempo de ejecución con este error:

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 antiguo con limitaciones de memoria es permitirte la opción de volver al modelo del sitio web. Incluso después de un éxito inicial, los problemas podrían aparecer más tarde.




En una aplicación web puede crear las capas de la funcionalidad de su proyecto y puede crear interdependencias entre ellas dividiéndola en muchos proyectos, pero nunca puede hacer esto en un sitio web.




Definitivamente aplicación web, único archivo DLL y fácil de mantener. Pero un sitio web es más flexible; puede editar el archivo aspx sobre la marcha.




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.




Sitios web: no se creará ningún archivo de solución. Si queremos crear sitios web, no es necesario Visual Studio.

Aplicación web: se creará un archivo de solución. Si queremos crear una aplicación web deberíamos necesitar el visual studio. Creará un solo archivo .dll en la carpeta bin.