質問

このフォームを難読化したとき、「デバッグ」

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
フルネーム:#yab。#zab


質問
FullNameが難読化されているのはなぜですか?
Form1は一般のものですので、スマートアセンブリを無視することを期待します。

追加情報
Form1public partialです。これはDesigner.csです

私のスマートアセンブリの設定は次のようなものです。

    <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によってパブリッククラスは無視されません(ライブラリプロジェクトでは無視されます)。

次に、 nameプロパティ実行時に設定されたプロパティです。あなたのケースの場合、それはあなたのコードのどこかで "Form1"に初期化されるかもしれません、多分デザイナーに。

この値はいつでも変更できます。

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

ShartAssemblyこの値を難読化することはできません、それは間違っているでしょう、そしてあなたのコードの動作を変えるでしょう。

SmartAssemblyがコードを難読化すると、型、フィールド、メソッドの名前を変更します。タイプの名前を取得しようとすると、それはあなたのタイプの難読化された名前を取得するための論理です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top