聲明式保護
啟用此選項后,您可以使用該屬性來選擇特定的保護功能,選擇是包含還是排除這些功能,并指定應受影響的類和成員。
選擇保護功能
可以通過為屬性“Feature”屬性指定值來選擇保護功能。
[System.Reflection.Obfuscation(Feature = "renaming,controlflow")
點擊復制
- “重命名”或“混淆”
- “字符串加密”
- “控制流”
- “死靈”
- “抗壓印”
- “隱藏方法”
重要提示:輸入的值必須用引號引起來,并且不區(qū)分大小寫。
定義行為
使用Exclude 屬性可以定義是應包含還是排除這些功能。
[System.Reflection.Obfuscation(Exclude = true, Feature = "renaming")
點擊復制
[System.Reflection.Obfuscation(Exclude = false, Feature = "controlflow")
點擊復制
- 要包含功能,請將排除屬性設置為false。
- 要排除功能,請將 Exclude 屬性設置為true。默認值為true,因此如果您希望排除某項功能,則可以選擇顯式設置 Exclude 屬性。
使用 'ApplyToMembers'屬性可以定義是應包含還是排除這些功能。
放置屬性和“ApplyToMembers”屬性您可以將屬性放置在類和成員(方法、屬性和字段)之上。
[System.Reflection.Obfuscation(Exclude = true, Feature = "controlflow") internal void MyMethod()
點擊復制
[System.Reflection.Obfuscation(Exclude = false, Feature = "renaming", ApplyToMembers = false) public class MyClass
點擊復制
ApplyToMembers屬性的默認值為true。由于它僅影響類成員(方法、屬性、字段和嵌套類)是否受到影響,因此它僅適用于裝飾類的屬性。如果您不希望類成員受到影響,請將 ApplyToMembers 屬性設置為false。
例子
示例1:
[System.Reflection.Obfuscation(Feature = "renaming") class MyClass { class NestedClass {} void MyMethod(){} }
點擊復制
MyClass、NestedClass 和 MyMethod 不會被重命名。
示例2:
[System.Reflection.Obfuscation(Exclude = true, Feature = "renaming", ApplyToMembers = true) class MyClass { class NestedClass {} void MyMethod(){} }
點擊復制
這與示例 1 等效。
示例3:
[System.Reflection.Obfuscation(Feature = "renaming", ApplyToMembers = false)] class MyClass { class NestedClass {} void MyMethod(){}
點擊復制
僅 MyClass 被排除在重命名之外,但 NestedClass 和 MyMethod 不會被排除。
示例4:
[System.Reflection.Obfuscation(Exclude = false, Feature = "renaming,stringencryption") // include [System.Reflection.Obfuscation(Exclude = true, Feature = "necrobit") // exclude class MyClass { int MyField; [System.Reflection.Obfuscation(Exclude = true, Feature = "renaming") // exclude void MyMethod(){} [System.Reflection.Obfuscation(Exclude = false, Feature = "necrobit") // include void MyMethod2(){} }
點擊復制
- 僅 MyField 和 MyMethod2 將被重命名。
- 字符串加密將應用于 MyMethod 和 MyMethod2
- NecroBit 將僅應用于 MyMethod2。
有一種特殊情況獨立于“聲明性保護”工作。如果您沒有為功能屬性設置值,則該屬性將排除重命名。
實施例5:
[System.Reflection.Obfuscation(ApplyToMembers = false)] class MyClass { class NestedClass {} void MyMethod(){} }
點擊復制
僅 MyClass 被排除在重命名之外,但 NestedClass 和 MyMethod 不會被排除。
實施例6:
[System.Reflection.Obfuscation()] enum MyEnum { A, B, C }
點擊復制
MyEnum 和所有字段都被排除在重命名之外。
實施例7:
enum MyEnum { A, [System.Reflection.Obfuscation()] B, C }
點擊復制
僅 B 字段被排除在重命名之外。