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:
- 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:
- 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:
- 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.