SmartAssembly offusca il tipo pubblico
-
26-12-2019 - |
Domanda
Quando offro questo modulo e "debug"
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);
}
}
.
L'output è come questo:
.Nome: Form1
Fullname: # yab. # Zab
Domanda
Perché FullName
ha offuscato?
Form1
è pubblica quindi mi aspetterei SmartAssembly di ignorarlo.
Informazioni extra
Form1
è public partial
e così è il designer.cs
.
.
Il mio SmartAssembly Setup è così:
<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>
. Soluzione
In primo luogo, una classe pubblica non viene ignorata da SmartAssembly in un progetto di applicazione (verrà ignorato in un progetto di libreria).
secondamente, Nome Property del tuo modulo è un set di proprietà in runtime.Nel caso caso, potrebbe essere inizializzato a "Form1" da qualche parte nel tuo codice, forse nel progettista.
Questo valore può essere modificato in qualsiasi momento, esempio:
public Form1()
{
InitializeComponent();
this.Name = "foo";
}
.
Così SmartAssembly non può offuscare questo valore, sarebbe sbagliato e cambierebbe il comportamento del tuo codice.
Quando SmartAssembly offusca il tuo codice, modifica solo i nomi dei tipi, dei campi e dei metodi.Quando provi a ottenere il nome del tuo tipo, è logico ottenere il nome offuscato del tuo tipo.