ASP.NET Web Site ou aplicativo da Web ASP.NET?

Quando inicio um novo projeto ASP.NET no Visual Studio, posso criar um aplicativo da Web do ASP.NET ou posso criar um site da Web do ASP.NET.

Qual é a diferença entre o ASP.NET Web Application e o ASP.NET Web Site? Por que eu escolheria um sobre o outro?

A resposta é diferente com base na versão do Visual Studio que estou usando?

Local na rede Internet:

O projeto do site é compilado em tempo real. Você acaba com muito mais arquivos DLL, o que pode ser uma dor. Também dá problemas quando você tem páginas ou controles em um diretório que precisa referenciar páginas e controles em outro diretório, já que o outro diretório pode não estar compilado no código ainda. Outro problema pode estar na publicação.

Se não for solicitado que o Visual Studio reutilize os mesmos nomes constantemente, ele criará novos nomes para os arquivos DLL gerados pelas páginas o tempo todo. Isso pode levar a várias cópias próximas de arquivos DLL contendo o mesmo nome de class, o que gerará muitos erros. O projeto do Web Site foi introduzido com o Visual Studio 2005, mas acabou não sendo extremamente popular.

Aplicação Web:

O Web Application Project foi criado como um suplemento e agora existe como parte do SP 1 para o Visual Studio 2005. As principais diferenças são que o Web Application Project foi projetado para funcionar de maneira semelhante aos projetos da Web fornecidos com o Visual Studio 2003. compilar o aplicativo em um único arquivo DLL no momento da criação. Para atualizar o projeto, ele deve ser recompilado e o arquivo DLL deve ser publicado para que as alterações ocorram.

Outro recurso interessante do projeto de Aplicativo da Web é que é muito mais fácil excluir arquivos da visualização do projeto. No projeto do Web Site, cada arquivo excluído é renomeado com uma palavra-chave excluída no nome do arquivo. No Web Application Project, o projeto apenas rastreia quais arquivos include / excluir da visualização do projeto sem renomeá-los, tornando as coisas muito mais claras.

Referência

O artigo ASP.NET 2.0 – Projeto Web Site vs Web Application também dá razões sobre por que usar um e não o outro. Aqui está um trecho disso:

  • Você precisa migrar grandes aplicativos do Visual Studio .NET 2003 para o VS 2005? use o projeto de aplicativo da Web.
  • Você deseja abrir e editar qualquer diretório como um projeto da Web sem criar um arquivo de projeto? usar o projeto do site.
  • Você precisa adicionar etapas de pré-compilation e pós-compilation durante a compilation? usar o projeto de aplicativo da Web.
  • Você precisa criar um aplicativo da Web usando vários projetos da Web? usar o projeto de aplicativo da Web.
  • Você deseja gerar uma assembly para cada página? usar o projeto do site.
  • Você prefere compilation dinâmica e trabalha em páginas sem criar site inteiro em cada exibição de página? usar o projeto do site.
  • Você prefere o modelo de código de página única ao modelo code-behind? usar o projeto do site.

Projetos de aplicativos Web versus projetos de sites (MSDN) explica as diferenças entre o site e os projetos de aplicativos da Web. Além disso, discute a configuração a ser feita no Visual Studio.

Web Site é o que você implanta em um servidor da Web ASP.NET, como o IIS. Apenas um monte de arquivos e pastas. Não há nada em um site que vincula você ao Visual Studio (não há nenhum arquivo de projeto). A geração de código e a compilation de páginas da Web (como .aspx, .ascx, .master) são feitas dinamicamente no tempo de execução , e as alterações nesses arquivos são detectadas pela estrutura e automaticamente compiladas. Você pode colocar o código que deseja compartilhar entre as páginas na pasta especial App_Code ou pode pré-compilá-lo e colocá-lo na pasta Bin.

Aplicativo Web é um projeto especial do Visual Studio. A principal diferença com o Web Sites é que, quando você constrói o projeto, todos os arquivos de código são compilados em um único assembly, que é colocado no diretório bin. Você não implanta arquivos de código no servidor da web. Em vez de ter uma pasta especial para arquivos de código compartilhado, você pode colocá-los em qualquer lugar, como faria na biblioteca de classs. Como os Aplicativos da Web contêm arquivos que não devem ser implantados, como arquivos de projeto e de código, existe um comando Publicar no Visual Studio para gerar um site da Web para um local especificado.

App_Code vs Bin

A implantação de arquivos de código compartilhado geralmente é uma má ideia, mas isso não significa que você tenha que escolher o Aplicativo da Web. Você pode ter um site que faz referência a um projeto de biblioteca de classs que contém todo o código do site. Aplicativos da Web é apenas uma maneira conveniente de fazer isso.

Código por trás

Este tópico é específico para arquivos .aspx e .ascx. Este tópico é decrescentemente relevante em novas estruturas de aplicativos, como ASP.NET MVC e ASP.NET Web Pages, que não usam arquivos codebehind.

Tendo todos os arquivos de código compilados em um único assembly, incluindo arquivos codebehind de páginas .aspx e controles .ascx, em Web Applications você precisa recompilar para cada pequena alteração e não pode fazer alterações ao vivo. Isso pode ser um problema real durante o desenvolvimento, já que você precisa continuar reconstruindo para ver as alterações, enquanto as alterações dos Sites são detectadas pelo tempo de execução e as páginas / controles são automaticamente recompiladas.

Ter o tempo de execução gerenciando os assemblies codebehind é menos trabalhoso para você, já que você não precisa se preocupar em dar páginas / controles a nomes exclusivos ou organizá-los em diferentes namespaces.

Eu não estou dizendo implantação de arquivos de código é sempre uma boa idéia (especialmente no caso de arquivos de código compartilhado), mas codebehind arquivos devem conter apenas código que executam tarefas específicas da interface do usuário, manipuladores de events de binding, etc Seu aplicativo deve ser em camadas para que o código importante sempre acabe na pasta Bin. Se for esse o caso, a implantação de arquivos codebehind não deve ser considerada prejudicial.

Outra limitação dos aplicativos da Web é que você só pode usar o idioma do projeto. Em sites da Web você pode ter algumas páginas em C #, algumas em VB, etc. Não há necessidade de suporte especial ao Visual Studio. Essa é a beleza da extensibilidade do provedor de compilation.

Além disso, em Aplicativos da Web, você não detecta erros em páginas / controles, pois o compilador apenas compila suas classs codebehind e não o código de marcação (no MVC você pode corrigir isso usando a opção MvcBuildViews), que é compilada em tempo de execução.

Estúdio visual

Como os aplicativos da Web são projetos do Visual Studio, você obtém alguns resources que não estão disponíveis em sites da Web. Por exemplo, você pode usar events de compilation para executar uma variedade de tarefas, por exemplo, minimizar e / ou combinar arquivos Javascript.

Outro recurso interessante introduzido no Visual Studio 2010 é a transformação Web.config . Isso também não está disponível em sites. Agora trabalha com sites da Web no VS 2013.

Construir um aplicativo da Web é mais rápido do que criar um site da Web, especialmente para sites grandes. Isso ocorre principalmente porque os aplicativos da Web não compilam o código de marcação. No MVC, se você definir MvcBuildViews como true, ele compila o código de marcação e você obtém a detecção de erros, o que é muito útil. O lado negativo é que toda vez que você cria a solução, ele constrói o site completo, que pode ser lento e ineficiente, especialmente se você não estiver editando o site. Eu me vejo ligando e desligando o MvcBuildViews (o que requer um projeto descarregado). Por outro lado, com os sites da Web, você pode escolher se deseja criar o site como parte da solução ou não. Se você optar por não, a criação da solução será muito rápida e você sempre poderá clicar no nó Site da Web e selecionar Criar, se tiver feito alterações.

Em um projeto MVC Web Application, você tem comandos e diálogos extras para tarefas comuns, como ‘Adicionar Visualização’, ‘Ir Para Ver’, ‘Adicionar Controlador’, etc. Estes não estão disponíveis em um Web Site da MVC.

Se você usar o IIS Express como o servidor de desenvolvimento, em Sites da Web, você poderá adicionar diretórios virtuais. Esta opção não está disponível em aplicativos da Web.

O NuGet Package Restore não funciona em Sites da Web, você tem que instalar manualmente pacotes listados em packages.config O Package Restore agora funciona com sites da Web que iniciam o NuGet 2.7

Web Site = use quando o site é criado por designers charts e os programadores apenas editam uma ou duas páginas

Aplicação Web = use quando o aplicativo é criado por programadores e os designers charts apenas editam uma ou duas páginas / imagens.

Web Sites podem ser trabalhados usando quaisquer ferramentas HTML sem ter que ter estúdio de desenvolvimento, já que os arquivos de projeto não precisam ser atualizados, etc. Os aplicativos da Web são melhores quando a equipe usa principalmente o estúdio de desenvolvimento e há um alto conteúdo de código.

(Alguns erros de codificação são encontrados em aplicativos da Web em tempo de compilation que não são encontrados em sites da Web até o tempo de execução.)

Aviso: Eu escrevi essa resposta há muitos anos e não usei o Asp.net desde então. Espero que as coisas tenham mudado agora.

A menos que você tenha uma necessidade específica de um projeto compilado dinamicamente, não use um projeto de site .

Por quê? Porque o projeto do site irá levá-lo até a parede ao tentar mudar ou entender seu projeto. A tipagem estática de encontrar resources (por exemplo, encontrar usos, refatorar) no Visual Studio vai levar uma eternidade em qualquer projeto de tamanho razoável. Para mais informações, consulte a questão do Stack Overflow, “Find All References”, no Visual Studio .

Eu realmente não vejo por que eles lançaram aplicativos da Web no Visual Studio 2005 para o tipo de projeto de site de carbuncle de produtividade indutor de dor, drenagem de saneamento.

Há um artigo no MSDN que descreve as diferenças:

Comparando Projetos de Sites e Projetos de Aplicativos da Web

BTW: há algumas perguntas semelhantes sobre esse tópico, por exemplo:

  • Site da Web versus Aplicativo da Web ASP.Net no Visual Studio note: foi removido, não está mais em SO
  • site ou webapplication in.ASP.NET

Isso pode parecer um pouco óbvio, mas acho que é algo mal entendido porque o Visual Studio 2005 só foi lançado originalmente com o site. Se o seu projeto lida com um site que é bastante limitado e não tem muita separação lógica ou física, o site está bem. No entanto, se for realmente um aplicativo da web com módulos diferentes, onde muitos usuários adicionam e atualizam dados, você fica melhor com o aplicativo da web.

O maior pro do modelo de website é que tudo na seção app_code é compilado dinamicamente. Você pode fazer atualizações de arquivos C # sem uma reimplantação completa. No entanto, isso é um grande sacrifício. Muitas coisas acontecem debaixo das cobertas que são difíceis de controlar. Os namespaces são difíceis de controlar e o uso específico de DLL sai da janela por padrão para qualquer coisa em app_code pois tudo é compilado dinamicamente.

O modelo de aplicativo da web não possui uma compilation dinâmica, mas você ganha controle sobre as coisas que mencionei.

Se você estiver desenvolvendo n camadas, recomendo o modelo de aplicativo da web. Se você está fazendo um site limitado ou uma implementação rápida e suja, o modelo do site pode ter vantagens.

Uma análise mais detalhada pode ser encontrada em:

  • Projetos de aplicativos Web e projetos de implantação da Web estão aqui
  • Web site ou aplicativo da Web?

Do exame de kit de treinamento autônomo MCTS 70-515 livro:

Com aplicação web (projeto),

  1. Você pode criar um aplicativo MVC.
  2. O Visual Studio armazena a lista de arquivos em um arquivo de projeto (.csproj ou .vbproj), em vez de confiar na estrutura de pastas.
  3. Você não pode misturar Visual Basic e C #.
  4. Você não pode editar o código sem interromper uma session de debugging.
  5. Você pode estabelecer dependencies entre vários projetos da web.
  6. Você deve compilar o aplicativo antes da implantação, o que impede que você teste uma página se outra página não for compilada.
  7. Você não precisa armazenar o código-fonte no servidor.
  8. Você pode controlar o nome e a versão do assembly.
  9. Você não pode editar arquivos individuais após a implantação sem recompilar.

Compilation Em primeiro lugar, há uma diferença na compilation. Web Site não é pré-compilado no servidor, é compilado em arquivo. Pode ser uma vantagem, porque quando você quer mudar alguma coisa no seu site, você pode simplesmente baixar um arquivo específico do servidor, alterá-lo e fazer o upload desse arquivo de volta ao servidor e tudo funcionaria bem. No Web Application, você não pode fazer isso porque o everthing é pré-compilado e você acaba com apenas uma dll. Quando você muda algo em um arquivo do seu projeto, você tem que recompilar tudo novamente. Então, se você gostaria de ter a possibilidade de alterar alguns arquivos no site do servidor é melhor solução para você. Também permite que muitos desenvolvedores trabalhem em um site. Por outro lado, se você não quiser que seu código esteja disponível no servidor, você deve escolher o Aplicativo da Web. Esta opção também é melhor para o Teste de Unidade, porque um arquivo DLL foi criado após a publicação do seu site.

Project structure Há também uma diferença na estrutura do projeto. No aplicativo da Web, você tem um arquivo de projeto exatamente como em um aplicativo normal. No Web Site não existe um arquivo de projeto tradicional, tudo que você tem é um arquivo de solução. Todas as referências e configurações são armazenadas no arquivo web.config. @Page directive Há um atributo diferente na diretiva @Page para o arquivo que contém a class associada a esta página. Na aplicação Web é padrão “CodeBehind”, no site você usa “CodeFile”. Você pode ver isso nos exemplos abaixo:

 Web Application: < %@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication._Default" %> 

Local na rede Internet:

 < %@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

Namespaces – No exemplo acima, você também pode ver outra diferença – como os namespaces são criados. No namespace de aplicativo da Web é simplesmente um nome do projeto. No site, há ASP de namespace padrão para páginas compiladas dinamicamente.

Editar e Continuar – Na opção Editar e Continuar do Aplicativo da Web está disponível (para ativá-lo, você precisa ir ao Menu Ferramentas, clicar em Opções e encontrar Editar e Continuar na Depuração). Esse recurso não está funcionando no Web Site.ASP.NET MVCIf você deseja desenvolver aplicativos da Web usando

ASP.NET MVC (Model View Controller), a melhor e opção padrão é o Web Application. Embora seja possível usar o MVC no Web Site, isso não é recomendado.

Resumo – A diferença mais importante entre o aplicativo da Web do ASP.NET e o site da Web é a compilation. Então, se você trabalha em um projeto maior, onde algumas pessoas podem modificá-lo, é melhor usar o site. Mas se você está fazendo um projeto menor, você pode usar o aplicativo da Web também.

Depende do que você está desenvolvendo.

Um site orientado para conteúdo terá seu conteúdo alterado com freqüência e um site é melhor para isso.

Um aplicativo tende a ter seus dados armazenados em um database e suas páginas e código mudam raramente. Nesse caso, é melhor ter um aplicativo da Web em que a implantação de montagens seja muito mais controlada e tenha melhor suporte para o teste de unidade.

Uma das principais diferenças é que os Websites compilam dinamicamente e criam montagens on-the-fly. Aplicativos da Web são compilados em uma grande assembly.

A distinção entre os dois foi eliminada no Visual Studio 2008.

Sim, o aplicativo da web é muito melhor do que os sites da web, porque os aplicativos da web nos dão liberdade:

  1. Ter vários projetos sob um único guarda-chuva e estabelecer dependencies de projeto entre eles. Por exemplo, para PCS, podemos ter acompanhamento em aplicativos da Web

    • Portais da web
    • Notification Controller (para envio de email)
    • Camada de negócios
    • Camada de access a dados
    • Gerente de exceção
    • Utilitário do servidor
    • Serviços WCF (comuns para todas as plataformas)
    • Item de lista
  2. Para executar testes de unidade no código que está nos arquivos de class associados às páginas ASP.NET

  3. Para se referir às classs, estas são associadas a páginas e controles de usuário de classs independentes
  4. Para criar uma única assembly para todo o site
  5. Controle sobre o nome do assembly e o número da versão que é gerado para o site
  6. Para evitar colocar o código-fonte em um servidor de produção. (Você pode evitar a implantação do código-fonte no servidor IIS. Em alguns cenários, como ambientes de hospedagem compartilhada, pode estar preocupado com o access não autorizado ao código-fonte no servidor IIS. (Para um projeto de site, você pode evitar esse risco pré-compilation em um computador de desenvolvimento e implantar os assemblies gerados em vez do código-fonte. No entanto, nesse caso, você perderá alguns dos benefícios das atualizações fáceis do site.)
  7. Problema de desempenho com o site (A primeira solicitação para o site pode exigir que o site seja compilado, o que pode resultar em atraso. E se o site estiver sendo executado em um servidor IIS com pouca memory, incluindo todo o site em um Um único assembly pode usar mais memory do que seria necessário para vários assemblies.

Os aplicativos geralmente são compilados antes da implantação, enquanto o site usa o diretório app_code. Quando alguma coisa muda na pasta do código do aplicativo, o servidor irá recompilar o código. Isso significa que você pode adicionar / alterar o código com um site na hora.

A vantagem de um aplicativo é que não há recompilation e, portanto, os tempos iniciais de boot serão mais rápidos.

Eu recomendo que você assista ao vídeo Projetos de Aplicação Web e Projetos de Implantação na Web no site da ASP.NET, que explica a diferença em grande detalhe, foi bastante útil para mim.

A propósito, não fique confuso com o título, uma grande parte do vídeo explica a diferença entre projetos de sites e projetos de aplicativos web e por que a Microsoft reintroduziu projetos de aplicativos Web no Visual Studio 2005 (como você provavelmente já sabe, originalmente enviados com apenas projetos de sites, os projetos de aplicativos da Web foram adicionados ao SP1). Um ótimo vídeo que eu recomendo para quem quer saber a diferença.

Um “site” tem seu código em um diretório App_Code especial e é compilado em várias DLLs (assemblies) em tempo de execução. Um “aplicativo da web” é pré-compilado em uma única DLL.

Site e Projeto >> site são dois methods diferentes de criação de aplicativos ASP.NET usando o visual studio. Um é sem projeto e outro é ambiente de projeto. Diferenças são tão

  1. O arquivo de solução é armazenado no mesmo diretório que o diretório raiz no ambiente do projeto.
  2. Precisa remover os arquivos da solução e do projeto antes de implantar no ambiente do projeto.
  3. O diretório raiz completo é implantado no ambiente sem projeto.

Não há muita diferença básica no uso de qualquer abordagem. Mas se você estiver criando um site que demore mais tempo, opte pelo ambiente do projeto.

Modelo de projeto de aplicativo da Web

  • Fornece a mesma semântica de projeto da Web que os projetos da Web do Visual Studio .NET. Tem um arquivo de projeto (estrutura baseada em arquivos de projeto). Modelo de construção – todo o código no projeto é compilado em um único assembly. Suporta o IIS e o ASP.NET Development Server integrado. Suporta todos os resources do Visual Studio 2005 (refatoração, genéricos, etc.) e do ASP.NET (páginas mestras, associação e login, navegação no site, temas, etc). Usando o FrontPage Server Extensions (FPSE) não são mais um requisito.

Modelo de projeto do site

  • Nenhum arquivo de projeto (Baseado no sistema de arquivos).
  • Novo modelo de compilation.
  • Compilação dinâmica e trabalho em páginas sem construir sites inteiros em cada visualização de página.
  • Suporta o IIS e o ASP.NET Development Server integrado.
  • Cada página tem sua própria assembly.
  • Modelo de código diferente.

É sempre depende da exigência do seu cliente. O ASP.NET inclui apenas resources flexíveis que o usuário precisa para segurança e fácil manutenção de seu aplicativo.

Você pode pensar em um aplicativo da Web como um arquivo binário que é executado dentro da estrutura do ASP.NET. E sites da Web como uma página da Web estática que você pode revisar e implantar facilmente o código-fonte.

Mas as vantagens e desvantagens dessas duas tecnologias ASP.NET são boas.

Websites – Nenhum arquivo de solução será criado. Se queremos criar sites não há necessidade de visual studio.

Aplicativo da Web – Um arquivo de solução será criado. Se quisermos criar uma aplicação web, precisamos do visual studio. Ele irá criar um único arquivo .dll na pasta bin.

Em projetos de aplicativos da Web, o Visual Studio precisa de arquivos .designer adicionais para páginas e controles de usuário. Web Site Projects não exigem essa sobrecarga. A marcação em si é interpretada como o design.

WebSite: Ele gera a pasta app_code automaticamente e se você publicá-la no servidor e depois disso, se você fizer algumas alterações em qualquer arquivo ou página em particular, você não precisará compilar todos os arquivos.

Aplicativo Web Gera automaticamente o arquivo de soluções que o site não gera e se você alterar em um arquivo do que você tem que compilar o projeto completo para refletir suas alterações.

Em um aplicativo da Web, você pode criar as camadas da funcionalidade do seu projeto e criar interdependencies entre elas, dividindo-as em muitos projetos, mas nunca é possível fazer isso em um site.

Definitivamente aplicação web, único arquivo DLL e fácil de manter. Mas um site é mais flexível; você pode editar o arquivo aspx em movimento.

Aplicativos da Web requerem mais memory, presumivelmente porque você não tem escolha a não ser compilar em um único assembly. Acabei de converter um site herdado grande em um aplicativo da web e tenho problemas com a falta de memory, tanto em tempo de compilation com a mensagem de erro como abaixo:

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

erro, e em tempo de execução com esta mensagem de erro como abaixo:

 Exception information: Exception type: HttpException Exception message: Exception of type 'System.OutOfMemoryException' was thrown. at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() 

Minha recomendação para converter sites maiores em hardware legado com restrição de memory é escolher a opção de reverter para o modelo de site. Mesmo depois de um problema inicial de sucesso, o problema pode surgir mais tarde.

Aqui Web Supportive Application é um exemplo de site.

Aqui Web Supportive Application é um exemplo de site. Website e Web Application podem ser dynamics / estáticos depende de seus requisitos, aqui está um exemplo para entender o funcionamento do site e da aplicação web.

Para resumir algumas das respostas acima:

Flexibilidade , você pode fazer alterações ao vivo em uma página da web?

Web Site : possível. Pro: benefícios de curto prazo. Con: risco a longo prazo do caos do projeto.

Web App : Con: não é possível. Edite uma página, arquive as alterações no controle de origem e, em seguida, crie e implante todo o site. Pro: mantenha um projeto de qualidade.

Questões de desenvolvimento

Web Site : estrutura de projeto simples sem um arquivo .csproj. Duas páginas .aspx podem ter o mesmo nome de class sem conflitos. Nome do diretório de projeto random que leva a erros de compilation, como o motivo pelo qual a estrutura .net entra em conflito com seu próprio arquivo gerado e por que a estrutura .net entra em conflito com seu próprio arquivo gerado . Pro: simples (simplista). Con: errático.

Web App : Estrutura de projeto semelhante ao projeto WebForms, com um arquivo .csproj. Nomes de class de páginas asp devem ser exclusivos. Pro: simples (inteligente). Con: nenhum, porque um aplicativo da web ainda é simples.