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);
}
}
الإخراج هو مثل هذا:
الاسم:Form1
FullName:#ياب.#الزاب
السؤال
لماذا FullName
غموض?
Form1
هو الجمهور لذا أتوقع SmartAssembly تجاهل ذلك.
معلومات اضافية
Form1
هو public partial
وذلك هو مصمم.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 في تطبيق مشروع (سيتم تجاهل في مشروع المكتبة).
ثانيا ، اسم المنشأة من النموذج الخاص بك هو مجموعة عقارات في وقت التشغيل.في حالتك الحالة ، قد يكون من تهيئة "Form1" في مكان ما في التعليمات البرمجية الخاصة بك, ربما في المصمم.
يمكن تغيير هذه القيمة في أي وقت ، على سبيل المثال :
public Form1()
{
InitializeComponent();
this.Name = "foo";
}
حتى SmartAssembly لا يمكن التعتيم على هذه القيمة ، فإنه سيكون من الخطأ و تغيير السلوك من التعليمات البرمجية الخاصة بك.
عندما SmartAssembly ويعتم التعليمات البرمجية الخاصة بك, فقط تغيير أسماء أنواع المجالات والأساليب.عندما الخاص بك في محاولة للحصول على اسم النوع ، فمن المنطقي للحصول على غموض اسم نوع.