Localizando assemblies compilados em modo debug

No meu último post eu comentei os problemas que pode ocorrer ao se publicar uma aplicação Web em modo debug para a produção.

Com isso, ficou uma dúvida: como saber se o meu website possui aplicações publicadas em modo debug. Uma forma muito simples de verificar isso é localizar o arquivo web.config e procurar pela diretiva <compilation debug=”true”>.

Mas eu vou mostrar uma outra técnica diferente aqui, que se baseia na inspeção de cada uma das DLLs contidas nas pastas de conteúdo do seu site.

Isso porque, eventualmente uma aplicação foi compilada em modo debug, e depois cpiada para produção, e então teve o seu arquivo web.config alterado (ajustado). O que pode ocorrer é que há DLLs em modo debug, mesmo com a diretiva já marcada como FALSE.

Vamos usar um script powershell 2.0 que varre as pastas a partir de um certa pasta, e localiza todos os arquivos .exe e .dll. Depois usamos o namespace System.Reflection.Assembly para verificar se foi compilado em modo debug ou release (atributo isJITTrackingEnabled).

Se a DLL não for compilada com .NET, será gerada um exceção e nada será escrito, caso contrário, uma mensagem com o nome e o atributo debug é exibido.  Veja o código-exemplo a seguir:

# # List Assemblies - requires a path # PARAM ( [string] $path = "" ) # List assemblies "Assemblies using debug mode" $files = dir -recurse -path $path -include "*.dll", "*.exe" foreach($file in $files) { try { $assembly = [System.Reflection.Assembly]::LoadFile($file); $attrib = $assembly.GetCustomAttributes($false) | where-object { $_ -is

[System.Diagnostics.DebuggableAttribute] } if ( $attrib.IsJITTrackingEnabled ) { $debug = 'Debug'; } else { $debug = 'Release'; } $version = $assembly.ImageRuntimeVersion; $file.FullName.ToLower().Replace($path.ToLower(),'') + " | " + $debug + " | " + $version ; } catch [System.Management.Automation.MethodInvocationException] { } }

DISCLAIMER: o código acima é fornecido “as is”, e sem garantias. Use por sua conta e risco.

Com isso, fica bem mais fácil identificar se há aplicações em modo DEBUG. Você pode usar a mesma abordagem para criar uma aplicação .NET (ou um Windows Service)

Até mais!