Compilation Debug=”true”, uma odisséia

Este é mais uma daqueles posts que retrata a sempre tensa relação entre os administradores de Servidores Web e os desenvolvedores de aplicações ASP.NET.

Resolvi escrever isso porque ontem estava conversando com um cliente e ele estava com dúvidas sobre o uso (ou não) dessa diretiva nos arquivos web.config das aplicações ASP.NET.

A pergunta que sempre se faz é a seguinte: Em que momento devo usar a diretiva <compilation debug=”true”/> em minhas aplicações ASP.NET. Semprem surgem duvidas em relação a resposta para esta questão, então vou tentar ser bem claro: NUNCA!!

O grande problema é que, por padrão, quando o desenvolvedor está criando a sua aplicação, é necessário ter esta diretiva habilitada para poder fazer o debugging da aplicação. Assim, o Visual Studio por padrão deixa o <compilation debug=”true” /> quando está se gerando um build em modo Debug. Por outro lado, se o código da aplicação for compilado em modo RELEASE, então teremos o <compilation debug=”false” />.

image

Cabe deixar bem claro que é responsabilidade do desenvolvedor gerar um build em modo RELEASE antes de enviar para a publicação no servidor Web. É também é responsabilidade do administrador de servidores Web garantir que não serão publicados builds em modo debug no ambiente de produção Web.

Há uma miríade de artigos explicando os problemas causados pelo deployment de aplicações em modo debug, então vou apontar um oficial que resume-os: https://support.microsoft.com/kb/2580348.

Para desabilitar o modo debug nas aplicações Web, basta seguir as recomendações do artigo: https://support.microsoft.com/kb/815157.

Algo que poucos sabem é que os administradores de servidores Web podem evitar que aplicações sejam publicadas em modo debug nos seus servidores, para o .NET Framework 2.0 e versões posteriores. Para isso, basta alterar o arquivo machine.config, adicionando a diretiva <deployment retail=”true” />, como exemplificado:

<configuration>
   <system.web>
      <deployment retail="true"/>
      ...
   </system.web>
</configuration>

Com isso, o debugging será desabilitado para todas as aplicações. Mas mesmo assim, se uma aplicação ainda estiver configurada para usar <compilation debug=”true” />, então o executionTimeout (ou seja, o tempo máximo que uma página pode executar) continuará sendo 30.000.000 segundos (ou seja, muiiiito tempo).

Resumindo, <deployment retail=”true” /> ajuda, mas não resolve o problema totalmente.

Então, DEVs e WebAdmins, fiquem atentos e não se esqueçam de sempre confirmar que as aplicações estão sendo publicadas em modo release no ambiente de produção.

Até mais!

Paulo.