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>
.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top