2014-06-05 52 views
1

當我混淆這種形式,而 「調試」 它SmartAssembly混淆大衆型

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


問題
爲什麼FullName被混淆?
Form1是公開的,所以我期望SmartAssembly忽略它。

額外的信息
Form1public partial,所以是designer.cs

我SmartAssembly的設置是這樣的:

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

「partial」僅對編譯器有意義,對於所有部分(可以是也可以不在其自己的文件中),訪問修飾符必須相同。 –

+0

我不同意。我在那裏看到了很多表單,其中部分類的Form1.designer.cs部分 - 儘管Form1.cs類是公共的,但是在那裏是私有的。 –

+0

要麼你看錯了,要麼代碼無法用「Form1的部分聲明」具有衝突的可訪問性修飾符進行編譯「。 [「所有部分必須具有相同的可訪問性,例如公共,私人等。」](http://msdn.microsoft.com/library/wa80x488.aspx「部分類和方法(C#編程指南)」 ) –

回答

2

首先,公共類不被SmartAssembly忽視在一個應用程序項目中(它將在一個庫項目中被忽略)。

其次,表單的Name property是在運行時設置的屬性。在你的情況下,它可能會初始化爲代碼中某處的「Form1」,或者在設計器中。

這個值可以隨時更改,例如:

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

所以SmartAssembly不能混淆這個值,這將是錯誤的,會改變你的代碼的行爲。

當SmartAssembly模糊您的代碼時,它只會更改類型,字段和方法的名稱。當您嘗試獲取您的類型的名稱時,獲取您的類型的混淆名稱是合乎邏輯的。

+0

你有一些關於你的陳述的文檔嗎?他們不符合我使用SmartAssembly混淆的期限。 –

+0

哪一個?首先在這裏(http://documentation.red-gate.com/display/SA6/Troubleshooting+name+mangling)。我只是在談論這裏的名字,因爲它似乎是你感興趣的一點。第二點更多的是基於我的經驗,也許我在我的解釋中並不完全清楚。 – Max

+1

我只是需要文檔 - 而你的陳述是正確的:)謝謝 –