SmartAssembly dissimule public type
-
26-12-2019 - |
Question
Quand je obscurcir ce formulaire, et "debug" il
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);
}
}
La sortie ressemble à ceci:
Nom:Form1
FullName:#Yab.#Zab
Question
Pourquoi FullName
obfuscation?
Form1
est public donc je m'attends SmartAssembly de l'ignorer.
Des infos supplémentaires
Form1
est public partial
et donc, en est le concepteur.cs
Mon SmartAssembly l'installation comme ceci:
<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>
La solution
Tout d'abord, une classe publique n'est pas ignoré par SmartAssembly dans un projet d'application (il sera ignoré dans un projet de bibliothèque).
Deuxièmement, l' Nom de la propriété de votre formulaire est une propriété à l'exécution.Dans votre cas, cas, il peut être initialisé à "Form1" quelque part dans votre code, peut-être dans le concepteur.
Cette valeur peut être modifiée à tout moment, par exemple :
public Form1()
{
InitializeComponent();
this.Name = "foo";
}
Donc SmartAssembly ne peut occulter cette valeur, il serait faux et serait de modifier le comportement de votre code.
Lorsque SmartAssembly code votre code, il ne change que les noms des types, des champs et des méthodes.Lorsque vous essayez d'obtenir le nom de votre type, il est logique d'obtenir de l'obfuscation nom de votre type.