Hoje tive a necessidade de automatizar o processo de obfuscar um assembly usando o Dotfuscator. Estou utilizando neste projeto o Dotfuscator Community Edition 1.1.1019.14017, que vem com o Microsoft Visual Studio 2003.
Encontrei uma referência a isso no WWs Blog, mas que não fala nada sobre assemblies que estejam assinados com strong names (o meu caso). Pesquisando mais um pouco, achei algo no próprio site do Dotfuscator: How can I use Dotfuscator when the obfuscation process would invalidate the signing of the assembly?
Resumindo a história, marque no seu AssemblyInfo.cs:
[assembly: AssemblyDelaySign(true)]
E digite em Project Properties/Common Properties/Build Events / Post-build Event Command Line:
sn.exe -Vr $(TargetFileName)Omiti os caminhos dos executáveis para simplificar. Mas, para não esquecer:
dotfuscator.exe /q ..\..\Dotfuscator.xml
copy ..\*.dll *.dll
sn.exe -Vu $(TargetFileName)
sn.exe -R $(TargetFileName) ..\..\$(TargetName).snk
- "C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\sn.exe"
- "C:\Program Files\Microsoft Visual Studio .NET 2003\PreEmptive Solutions\Dotfuscator Community Edition\dotfuscator.exe"
Assume-se que você salvou um projeto do Dotfuscator com o nome de Dotfuscator.xml no diretório da solução, que também contém o seu arquivo de chave .SNK, e que o Dotfuscator salva a DLL modificada diretamente na pasta BIN.
Mais instruções podem ser obtidas aqui: Dotfuscating Strong Named Assemblies.