声明式保护
启用此选项后,您可以使用该属性来选择特定的保护功能,选择是包含还是排除这些功能,并指定应受影响的类和成员。
选择保护功能
可以通过为属性“Feature”属性指定值来选择保护功能。
[System.Reflection.Obfuscation(Feature = "renaming,controlflow")
点击复制
- “重命名”或“混淆”
- “字符串加密”
- “控制流”
- “死灵”
- “抗压印”
- “隐藏方法”
重要提示:输入的值必须用引号引起来,并且不区分大小写。
定义行为
使用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 字段被排除在重命名之外。