ASP .NET - Quais as diferenças entre Web Site e Web Application Project ?


Os famigerados projetos do tipo website foram introduzidos no Visual Studio 2005 já o projeto do tipo Web Application foram introduzidos no VS 2003.

O projeto do tipo website esta baseado em uma estrutura de pastas e não precisa de um arquivo de projeto. Mais tarde no service pack 1 do VS 2005, o arquivo de projeto foi introduzido para o projeto do tipo website.

Atualmente no Visual Studio 2008 podemos criar ambos os tipos de projetos.

1- Projeto do tipo website

Abra o Visual Studio 2008 e no menu File selecione File-> New web Site e a seguir selecione o template ASP .NET Web site e clique no botão OK;

Você verá a estrutura da figura abaixo na janela Solution Explorer, e, se abrir o arquivo Default.aspx e exibir o seu código fonte irá notar a declaração : CodeFile="Default.aspxvb";

Todos os arquivos .aspx possuem a palavra chave CodeFile para referenciar os arquivos .vb ou .cs que serão compilados em tempo de execução (run-time).

2- Projeto do tipo Web Application

Agora abra o Visual Studio 2008 e no menu File selecione File-> New Project e a seguir selecione o template ASP .NET Web Application e clique no botão OK;

Você verá a estrutura da figura abaixo na janela Solution Explorer, e, se abrir o arquivo Default.aspx e exibir o seu código fonte irá notar a declaração : CodeBehind="Default.aspxvb";

Todos os arquivos .aspx possuem a palavra chave CodeBehind para referenciar os arquivos .vb ou .cs que serão compilados gerando uma dll na pasta bin.

Olhando apenas para janela Solution Explorer não dá para perceber muito a diferença ?? Ela existe mas é bem sutil.

Ambos os projetos aceitam ser criados em pastas em disco, mas...

Vamos espiar as pastas onde o web site e o projeto web application foram criados.

1- Web Site

O web site foi criado na pasta c:\aspn\WebSite2 e contém os seguintes arquivos:

Se você executar o web site não vai encontrar o arquivo DLL pois por padrão o VS trabalha com compilação sob demanda (a partir da ASP .NET 2.0);

Em um projeto do tipo website os arquivos .designer e .vb (.cs) são gerados de forma dinâmica em tempo de execução.

2- Web Application

Já o projeto Web Application foi criado na pasta Projects do Visual Studio e possui os seguintes arquivos:

Se você executar o projeto Web Application e espiar a pasta bin do projeto irá encontrar o arquivo .dll referente aos arquivos code-behind da aplicação que foram compilados. Os arquivos .vb (.cs) são compilados em tempo de desenvolvimento o que implica que os arquivos .vb (.cs) e .designer também são gerados em tempo de desenvolvimento.

Em um projeto do tipo Web Application o code-behind será compilado e irá gerar um arquivo .dll na pasta bin.

Portanto , o deploy de todo o código fonte não pode ser feito no Web Application.

WebSite e Web Application Principais diferenças

Um diferença importante é que no projeto Web Application temos os arquivos de projeto (.vbproj ou .csproj) onde residem as referências do projeto enquanto que em um Website não existem os arquivos de projeto (.vbproj ou .csproj) e as referências ficam armazenadas no arquivo web.config.

O comportamento dos tipos de aplicação é o mesmo mas um projeto do tipo website é baseado em pastas e um projeto do tipo Web Applicaton é baseado em um projeto normal do Visual Studio.

Além disso, um projeto Website contém uma estrutura de pastas e se você incluir um arquivo com código, um arquivo tipo class, no projeto será criada a pasta App_Code e tudo que você colocar nesta pasta será compilado e irá fazer parte do web site.

Em um projeto Web Application existem os designers para as páginas .aspx e existem também a pasta bin que contém o assembly compilado.

Um projeto Web Application esta restrito a uma única linguagem já em um projeto website você pode incluir arquivos com diferentes linguagens, VB.Net ou C#, na pasta App_Code que eles serão compilados dinamicamente.

Você pode inclui arquivos com linguagens diferentes em um WebSite desde que eles estejam na mesma pasta. Se você alterar a localização do arquivo então você precisa registrar isso no arquivo Web.Config da seguinte forma:

<codeSubDirectories>
       <add directoryName="Teste"/>
</codeSubDirectories>

O processo de compilação é mais controlado em um projeto Web Application pois em um projeto Web Site tudo é compilado dinamicamente.

Em um projeto Website você pode alterar o code-behind que a alteração se reflete imediatamente na aplicação sem ter que recompilar a aplicação.

Quando você o deploy de um projeto Web Application você pode apenas copiar o Assembly compilado e o os elementos visuais para a pasta IIS, já em um projeto website você precisa copiar tudo para IIS(Internet Information Service) poder trabalhar corretamente.

Ao publicar os arquivos de um projeto Website, usando o menu Build -> Publish Website, você verá a seguinte janela:

Se você selecionar a opção - Allow this precompiled site to be updatable - então você vai encontrar a basta precompiled no local onde você publicou o website e lá vai encontrar múltiplos assemblies para cada pasta no website.

Projeto Web Application -> uma única DLL , um executável;

Projeto Website -> várias DLLs , uma por diretório, e com nomes diferentes;

Detalhe importante: como no projeto Website não é gerada uma DLL na compilação você vai ter que enviar o seu código fonte para o servidor ao invés da DLL, a menos que escolha a opção de pré-compilação.

Obs: No VS2010 já não existe a opção Create Website na página de abertura(no VS 2008 essa opção também não existia mais) e o ASP .NET MVC não possui o template website . Será que isso não é seria uma indicação de que os projetos do tipo website estão com os dias contados ?

Eu sei é apenas ASP .NET, mas eu gosto...

Referências:  

José Carlos Macoratti