Skip to main content

Diferença entre Web Site e Web Application no ASP.net

WebSite vs WebApplication, saiba as todas as diferenças entre esses dois tipos de aplicações asp.net no Visual Studio


webapplication vs website

Já me perguntaram várias vezes qual a diferença entre WebSite e WebApplication no Visual Studio (onde WebSite está presente apenas nas versões 2005, 2008, 2010 e provavelmente nas próximas versões). Se você não está familiarizado com o Visual Studio 2005/2008/2010 pode achar que um WebApplication e WebSite são a mesma coisa. Gostaria de contar uma história para esclarecer ainda mais.

No Visual 2002 e 2003 só havia WebApplication e nunca se falou em WebSite. Com a chegada do Visual Studio 2005, juntamente com o framework .net 2.0, surgiu uma arquitetura diferente voltada à colaboração de código: o WebSite.

Olha só o que aconteceu no lançamento do Visual Studio 2005: O VS 2005 para projetos web tinha apenas a opção de WebSite e então começaram as reclamações da comunidade asp.net. As reclamações ganharam força e a Microsoft lançou no Service Pack 1 do Visual Studio 2005 a opção de WebApplication muito similar das versões 2002 e 2003 (Vale lembrar: antes do Service Pack 1 foi lançado uma atualização específica para suportar WebApplication, mas quem ainda utiliza o VS 2005 recomendo atualizar o SP1 e demais atualizações do Microsoft Update).

WebSite no Visual Studio

Um WebSite é apenas um grupo de arquivos em uma pasta e subpastas onde as classes estão em um mesmo namespace (no Java, namespace é similar ao package).

Algo interessante no WebSite é que ao depurar uma aplicação, é possível alterar o código-fonte de uma classe (.cs ou .vb) e continuar depurando obedecendo suas alterações na depuração, algo que o WebApplication não faz.

Você pode criar um WebSite utilizando o menu “File > New> Web Site...”. Há três opções da localização dos arquivos:

  • File System: Permite escolher uma pasta física.
  • HTTP: Permite escolher uma pasta virtual.
  • FTP: Permite escolher um endereço de FTP.

Em qualquer um dos casos acima nenhum arquivo de projeto (.csproj ou .vbproj) é criado automaticamente. Não haverá uma pasta “bin” (exceto no deploy - explicação abaixo) nem um único arquivo assembly (dll).

A maior diferença entre o WebSite e WebApplication está no deployment (“Publish”). O deploy realizado no WebApplication consiste simplesmente em uma DLL para cada projeto em uma solução (.sln). Já no WebSite temos 3 opções de deployment descritas abaixo:

  1. Código totalmente aberto: Esse tipo de deployment deixa todo seu código-fonte no servidor de hospedagem, incluindo as classes.
    Para efetuar este tipo de deployment, basta copiar todos os arquivos da pasta do WebSite para o servidor Web ou utilizar a opção "Copy WebSite" que encontra-se no ícone abaixo:
  2. Código-fonte das classes pré-compiladas e páginas (.aspx) com o código aberto.
    Para publicar seu site onde apenas as classes devem ser pré-compiladas, você deve deixar seu "Publish WebSite" assim:
  3. Todo o website pré-compilado, inclusive as páginas (.aspx).
    Nesta opção as páginas (ASPX) estarão com uma linha de código apenas: "This is a marker file generated by the precompilation tool, and should not be deleted!", ou seja, o arquivo serve apenas para o servidor web saber que a página existe, pois todo o conteúdo estará pré-compilado na pasta "bin".

Uma dica para quem utiliza os tipos 2 e 3: Utilize a opção "Used fixed naming and single page assemblies". Esta opção vai definir nomes fixos para os arquivos DLL. Se não utilizar esta opção, a cada deploy gerado as DLL mudam de nome e você ficará com arquivos inutilizados dentro da sua pasta BIN (se você apaga todo o seu site antes de publicá-lo, não fará diferença utilizar esta opção).

Web Application no Visual Studio

Para criar um WebApplication: File > New > Project. Selecione Web e escolha o tipo de aplicação ASP.NET Web Application.

Um "Web Application Project" organiza os arquivos do projeto em um arquivo chamado <nomedoprojeto>.csproj (para C#) ou <nomedoprojeto>.vbproj (para VB.net). Esses arquivos podem ser úteis para quem faz deploy automático com o Source Safe criando "labels" ou com o SVN criando "tags", por exemplo.

Seu único tipo de build / deployment gera um único arquivo DLL (pré-compilação) que fica na pasta BIN do projeto. No WebSite tudo que é adicionado participa do deploy, já no Web Application é possível colocar arquivos DOC, por exemplo, e setá-los para não participarem do Deployment. Para isso clique com o botão direito do mouse no arquivo desejado dentro do projeto e em seguida em "Properties", modifique a opção "Build Action" para "None".

WebApplication tem suas classes organizadas por namespaces, podendo ser criada classes em qualquer pasta do projeto, diferentemente do que ocorre no WebSite onde é possível apenas inserir classes na pasta App_Code.

Performance

Sabemos que o .net tem 2 fases de compilação: A primeira quando você faz o Build é a que chamamos de pré-compilação onde os arquivos DLLs estão pré-compilados em uma linguagem comum (Intermediate Language) para o Framework .NET. A segunda é quando a aplicação é executada, neste momento ocorre a compilação binária.

Devido a compilação da aplicação ocorrer 2 vezes, a velocidade no WebSite é questionada e dependerá do tipo de deployment (já visto acima) utilizado. A opção 3 de deploy do WebSite deve ser considerada a mais veloz, mas com testes realizados no cliente (navegador) o resultado é imperceptível comparado ao WebApplication.

Comparação WebSite X Web Application

   WebApplication WebSite
Arquivo de projeto Sim Não
Pasta App_Code Sim* Sim
Classes organizadas por Namespaces Sim Não
Opções de Deployment 1 3
Alteração das classes na Depuração (Debug) Não Sim
Alteração na página (.aspx) na Depuração (Debug) Sim Sim
Properties do Arquivo no projeto Sim Não

*é necessário criá-la manualmente com a opção New Folder e, se necessário, mudar a Propriedade "Build Action" das classes dentro da App_Code para "Compile".

Conclusão

Utilizar WebSite ou Web Application pode parecer, dependendo do caso, indiferente, por isso é preciso analisar seu ambiente, seu modo de gerenciar o código-fonte, versionamento e a geração de builds e deployments.

Pela experiência com aplicações ASP.NET, percebi que o WebSite me causou alguns problemas em relação a referências, deployments e versionamento com Source Safe e SVN.

Em um Web Application você tem maior controle de configuração, principalmente porque temos propriedades do projeto e as propriedades de cada arquivo no Visual Studio. Devido a essas propriedades você consegue trabalhar melhor com objetos COM+ (por exemplo, definindo Copy Local = true na referência). Também pode gerar builds em modo Debug e/ou Release e seu código-fonte é organizado em namespaces.

Provavelmente se você utiliza o Visual Studio apenas em casa para projetos pessoais pode acabar gostando do WebSite, mas utilizando em grandes projetos empresariais onde Build e Deployment são peças chaves do processo, o Web Application acaba sendo a melhor opção.

publicado por Mauricio Hernaski