Pergunta

Quando ofusco este formulário e o "depuro"

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);
  }
}

A saída é assim:

Nome:Formulário 1
Nome completo:#Yab.#Zab


Pergunta
Por que é FullName ofuscado?
Form1 é público, então espero que o SmartAssembly o ignore.

Informação extra
Form1 é public partial e o designer também.cs

Minha configuração do SmartAssembly é assim:

    <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>
Foi útil?

Solução

Primeiramente, uma classe pública não é ignorada pelo SmartAssembly em um projeto de aplicação (ela será ignorada em um projeto de biblioteca).

Em segundo lugar, o Propriedade de nome do seu formulário é uma propriedade definida em tempo de execução.No seu caso, ele pode ser inicializado em "Form1" em algum lugar do seu código, talvez no designer.

Este valor pode ser alterado a qualquer momento, exemplo:

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

Portanto o SmartAssembly não pode ofuscar esse valor, seria errado e mudaria o comportamento do seu código.

Quando o SmartAssembly ofusca seu código, ele altera apenas os nomes dos tipos, campos e métodos.Quando você tenta obter o nome do seu tipo, é lógico obter o nome ofuscado do seu tipo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top