SmartAssembly ofusca o tipo público
-
26-12-2019 - |
Pergunta
Quando ofusco este formulário e o "depuro"
public partial class Form1 : Form
{
public void Form1()
{
InitializeComponents();
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
Console.WriteLine("Name: "+this.Name);
Console.WriteLine("FullName: "+this.GetType().FullName);
}
}
A saída é assim:
Nome:Formulário 1
Nome completo:#Yab.#Zab
Pergunta
Por que é FullName
ofuscado?
Form1
é público, então espero que o SmartAssembly o ignore.
Informação extra
Form1
é public partial
e o designer também.cs
Minha configuração do SmartAssembly é assim:
<ApplicationName />
<Destination DestinationFileName=".\bin.obfuscated\MyProject.Form1.exe" />
<Assemblies>
<Assembly AssemblyName="MyProject.Form1, Culture=neutral, PublicKeyToken=omitted">
<Merging>
<ResourcesCompression Compress="0" />
<MemberRefsProxy />
<Pruning />
<Obfuscation Obfuscate="1">
<Exclusions />
</Obfuscation>
<ControlFlow Obfuscate="1" />
</Merging>
</Assembly>
</Assemblies>
<Options>
<Obfuscation FieldsNameMangling="2" NameMangling="1" />
<ExceptionReporting />
<FeatureUsageReporting Template="res:SmartUsageWithUIConsentFirstRun1033.dll" />
<StrongNameSigning KeyFileName="PathToKeyFile" Sign="1" />
<OtherProtections />
<StringsEncoding />
<OtherOptimizations />
<Debugging />
</Options>
Solução
Primeiramente, uma classe pública não é ignorada pelo SmartAssembly em um projeto de aplicação (ela será ignorada em um projeto de biblioteca).
Em segundo lugar, o Propriedade de nome do seu formulário é uma propriedade definida em tempo de execução.No seu caso, ele pode ser inicializado em "Form1" em algum lugar do seu código, talvez no designer.
Este valor pode ser alterado a qualquer momento, exemplo:
public Form1()
{
InitializeComponent();
this.Name = "foo";
}
Portanto o SmartAssembly não pode ofuscar esse valor, seria errado e mudaria o comportamento do seu código.
Quando o SmartAssembly ofusca seu código, ele altera apenas os nomes dos tipos, campos e métodos.Quando você tenta obter o nome do seu tipo, é lógico obter o nome ofuscado do seu tipo.