SmartAssembly запутывает общедоступный тип
-
26-12-2019 - |
Вопрос
Когда я запутываю эту форму и "отлаживаю" ее
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);
}
}
Результат выглядит следующим образом:
Имя:Форма 1
Полное имя:#Яб.#Заб
Вопрос
Почему это FullName
запутанный?
Form1
является общедоступным, поэтому я бы ожидал, что SmartAssembly проигнорирует его.
Дополнительная информация
Form1
является public partial
так же, как и designer.cs
Моя настройка SmartAssembly выглядит следующим образом:
<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>
Решение
Во-первых, открытый класс не игнорируется SmartAssembly в проекте приложения (он будет игнорироваться в проекте библиотеки).
Во-вторых, Свойство name (Имя) часть вашей формы - это свойство, установленное во время выполнения.В вашем случае это может быть инициализировано как "Form1" где-то в вашем коде, возможно, в конструкторе.
Это значение может быть изменено в любое время, например :
public Form1()
{
InitializeComponent();
this.Name = "foo";
}
Таким образом, SmartAssembly не может запутать это значение, это было бы неправильно и изменило бы поведение вашего кода.
Когда SmartAssembly запутывает ваш код, он изменяет только имена типов, полей и методов.Когда вы пытаетесь получить имя вашего типа, логично получить запутанное имя вашего типа.