Pregunta

cuando ofusco este formulario, y "depurar",

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 salida es así:

Nombre: Form1
Nombre completo: # yab. # Zab


Pregunta
¿Por qué está obcecado FullName? Form1 es público, por lo que espero que SmartSembly lo ignore.

información adicional
Form1 es public partial y también lo es el diseño.

Mi configuración SmartSembly es así:

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

¿Fue útil?

Solución

En primer lugar, una clase pública no es ignorada por SmartSembly en un proyecto de aplicación (se ignorará en un proyecto de biblioteca).

En segundo lugar, el Nombre de la propiedad de su formulario es una propiedad establecida en Tiempo de ejecución.En su caso, se puede inicializar "Form1" en algún lugar de su código, tal vez en el diseñador.

Este valor se puede cambiar en cualquier momento, ejemplo:

public Form1()
{
    InitializeComponent();
    this.Name = "foo";
}

SOBRE SmartSembly no puede ofuscar este valor, estaría mal y cambiaría el comportamiento de su código.

Cuando SmartSembly offusca su código, solo cambia los nombres de los tipos, campos y métodos.Cuando intente obtener el nombre de su tipo, es lógico obtener el nombre ofuscado de su tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top