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>
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top