ObfuscationAttribute ObfuscationAttribute ObfuscationAttribute ObfuscationAttribute Class

Definition

Указывает средствам запутывания, что следует предпринять заданные действия для сборки, типа или члена. Instructs obfuscation tools to take the specified actions for an assembly, type, or member.

public ref class ObfuscationAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Struct | System.AttributeTargets.Enum | System.AttributeTargets.Method | System.AttributeTargets.Property | System.AttributeTargets.Field | System.AttributeTargets.Event | System.AttributeTargets.Interface | System.AttributeTargets.Parameter | System.AttributeTargets.Delegate, AllowMultiple=true, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
[System.AttributeUsage(System.AttributeTargets.Assembly | System.AttributeTargets.Class | System.AttributeTargets.Delegate | System.AttributeTargets.Enum | System.AttributeTargets.Event | System.AttributeTargets.Field | System.AttributeTargets.Interface | System.AttributeTargets.Method | System.AttributeTargets.Parameter | System.AttributeTargets.Property | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=false)]
public sealed class ObfuscationAttribute : Attribute
type ObfuscationAttribute = class
    inherit Attribute
Public NotInheritable Class ObfuscationAttribute
Inherits Attribute
Inheritance
ObfuscationAttributeObfuscationAttributeObfuscationAttributeObfuscationAttribute
Attributes

Examples

В следующем примере кода показано, открытая сборка с двумя типами: Type1 и Type2.The following code example shows a public assembly with two types: Type1 and Type2. Сборка помечена для запутывания с ObfuscateAssemblyAttribute, что означает пометку сборки должен обрабатываться как public (то есть AssemblyIsPrivate свойство false).The assembly is marked for obfuscation with the ObfuscateAssemblyAttribute, which marks the assembly to be treated as public (that is, the AssemblyIsPrivate property is false).

Type1 помечено для запутывания, так как сборка помечена для запутывания.Type1 is marked for obfuscation because the assembly is marked for obfuscation. С одним элементом Type1 исключен из операции запутывания, с помощью Exclude свойство.One member of Type1 is excluded from obfuscation, using the Exclude property.

Type2 исключен из операции запутывания, но его элементов, помеченных для запутывания, так как ApplyToMembers свойство false.Type2 is excluded from obfuscation, but its members are marked for obfuscation because the ApplyToMembers property is false.

MethodA Метод Type2 помечается значение "default" для Feature свойство.The MethodA method of Type2 is marked with the value "default" for the Feature property. Необходимо указать false для Exclude свойства, чтобы избежать исключая MethodA из операции запутывания, так как по умолчанию для Exclude свойство true.It is necessary to specify false for the Exclude property to avoid excluding MethodA from obfuscation, because the default for the Exclude property is true. Средство запутывания должно удаляет атрибут после запутывания поскольку StripAfterObfuscation свойство false.The obfuscation tool should not strip the attribute after obfuscation because the StripAfterObfuscation property is false. Все другие атрибуты в этом примере кода удаляются после запутывания, так как StripAfterObfuscation свойство не указано и следовательно, по умолчанию true.All the other attributes in this code example are stripped after obfuscation, because the StripAfterObfuscation property is not specified, and therefore defaults to true.

В примере кода содержится код для отображения атрибутов и их свойств.The code example includes code to display the attributes and their properties. Атрибуты также можно проверить, открыв библиотеку DLL с Ildasm.exe (дизассемблер IL).You can also examine the attributes by opening the DLL with the Ildasm.exe (IL Disassembler).

using System;
using System.Reflection;

// Mark this public assembly for obfuscation.
[assembly:ObfuscateAssemblyAttribute(false)]

// This class is marked for obfuscation, because the assembly
// is marked.
public class Type1
{

    // Exclude this method from obfuscation. The default value
    // of the Exclude property is true, so it is not necessary
    // to specify Exclude=True, although spelling it out makes
    // your intent clearer.
    [ObfuscationAttribute(Exclude=true)]
    public void MethodA() {}

    // This member is marked for obfuscation because the class
    // is marked.
    public void MethodB() {}
}

// Exclude this type from obfuscation, but do not apply that
// exclusion to members. The default value of the Exclude 
// property is true, so it is not necessary to specify 
// Exclude=true, although spelling it out makes your intent 
// clearer.
[ObfuscationAttribute(Exclude=true, ApplyToMembers=false)]
public class Type2
{

    // The exclusion of the type is not applied to its members,
    // however in order to mark the member with the "default" 
    // feature it is necessary to specify Exclude=false,
    // because the default value of Exclude is true. The tool
    // should not strip this attribute after obfuscation.
    [ObfuscationAttribute(Exclude=false, Feature="default", 
        StripAfterObfuscation=false)]
    public void MethodA() {}

    // This member is marked for obfuscation, because the 
    // exclusion of the type is not applied to its members.
    public void MethodB() {}

}

// This class only exists to provide an entry point for the
// assembly and to display the attribute values.
internal class Test
{

    public static void Main()
    {

        // Display the ObfuscateAssemblyAttribute properties
        // for the assembly.        
        Assembly assem = typeof(Test).Assembly;
        object[] assemAttrs = assem.GetCustomAttributes(
            typeof(ObfuscateAssemblyAttribute), false);

        foreach( Attribute a in assemAttrs )
        {
            ShowObfuscateAssembly((ObfuscateAssemblyAttribute) a);
        }

        // Display the ObfuscationAttribute properties for each
        // type that is visible to users of the assembly.
        foreach( Type t in assem.GetTypes() )
        {
            if (t.IsVisible)
            {
                object[] tAttrs = t.GetCustomAttributes(
                    typeof(ObfuscationAttribute), false);

                foreach( Attribute a in tAttrs )
                {
                    ShowObfuscation(((ObfuscationAttribute) a),
                        t.Name);
                }

                // Display the ObfuscationAttribute properties
                // for each member in the type.
                foreach( MemberInfo m in t.GetMembers() )
                {
                    object[] mAttrs = m.GetCustomAttributes(
                        typeof(ObfuscationAttribute), false);

                    foreach( Attribute a in mAttrs )
                    {
                        ShowObfuscation(((ObfuscationAttribute) a), 
                            t.Name + "." + m.Name);
                    }
                }
            }
        }
    }

    private static void ShowObfuscateAssembly(
        ObfuscateAssemblyAttribute ob)
    {
        Console.WriteLine("\r\nObfuscateAssemblyAttribute properties:");
        Console.WriteLine("   AssemblyIsPrivate: {0}", 
            ob.AssemblyIsPrivate);
        Console.WriteLine("   StripAfterObfuscation: {0}",
            ob.StripAfterObfuscation);
    }

    private static void ShowObfuscation(
        ObfuscationAttribute ob, string target)
    {
        Console.WriteLine("\r\nObfuscationAttribute properties for: {0}",
            target);
        Console.WriteLine("   Exclude: {0}", ob.Exclude);
        Console.WriteLine("   Feature: {0}", ob.Feature);
        Console.WriteLine("   StripAfterObfuscation: {0}",
            ob.StripAfterObfuscation);
        Console.WriteLine("   ApplyToMembers: {0}", ob.ApplyToMembers);
    }
}

/* This code example produces the following output:

ObfuscateAssemblyAttribute properties:
   AssemblyIsPrivate: False
   StripAfterObfuscation: True

ObfuscationAttribute properties for: Type1.MethodA
   Exclude: True
   Feature: all
   StripAfterObfuscation: True
   ApplyToMembers: True

ObfuscationAttribute properties for: Type2
   Exclude: True
   Feature: all
   StripAfterObfuscation: True
   ApplyToMembers: False

ObfuscationAttribute properties for: Type2.MethodA
   Exclude: False
   Feature: default
   StripAfterObfuscation: False
   ApplyToMembers: True
 */
Imports System.Reflection

' Mark this public assembly for obfuscation.
<Assembly: ObfuscateAssemblyAttribute(False)>

' This class is marked for obfuscation, because the assembly
' is marked.
Public Class Type1

    ' Exclude this method from obfuscation. The default value
    ' of the Exclude property is True, so it is not necessary
    ' to specify Exclude:=True, although spelling it out makes
    ' your intent clearer.
    <ObfuscationAttribute(Exclude:=True)> _
    Public Sub MethodA()
    End Sub

    ' This member is marked for obfuscation because the class
    ' is marked.
    Public Sub MethodB()
    End Sub

End Class

' Exclude this type from obfuscation, but do not apply that
' exclusion to members. The default value of the Exclude 
' property is True, so it is not necessary to specify 
' Exclude:=True, although spelling it out makes your intent 
' clearer.
<ObfuscationAttribute(Exclude:=True, ApplyToMembers:=False)> _
Public Class Type2

    ' The exclusion of the type is not applied to its members,
    ' however in order to mark the member with the "default" 
    ' feature it is necessary to specify Exclude:=False,
    ' because the default value of Exclude is True. The tool
    ' should not strip this attribute after obfuscation.
    <ObfuscationAttribute(Exclude:=False, _
        Feature:="default", StripAfterObfuscation:=False)> _
    Public Sub MethodA()
    End Sub

    ' This member is marked for obfuscation, because the 
    ' exclusion of the type is not applied to its members.
    Public Sub MethodB()
    End Sub

End Class

' This class only exists to provide an entry point for the
' assembly and to display the attribute values.
Friend Class Test

    Public Shared Sub Main()

        ' Display the ObfuscateAssemblyAttribute properties
        ' for the assembly.        
        Dim assem As Assembly =GetType(Test).Assembly
        Dim assemAttrs() As Object = _
            assem.GetCustomAttributes( _
                GetType(ObfuscateAssemblyAttribute), _
                False)

        For Each a As Attribute In assemAttrs
            ShowObfuscateAssembly(CType(a, ObfuscateAssemblyAttribute))
        Next

        ' Display the ObfuscationAttribute properties for each
        ' type that is visible to users of the assembly.
        For Each t As Type In assem.GetTypes()
            If t.IsVisible Then
                Dim tAttrs() As Object = _
                    t.GetCustomAttributes( _
                        GetType(ObfuscationAttribute), _
                        False)

                For Each a As Attribute In tAttrs
                    ShowObfuscation(CType(a, ObfuscationAttribute), _
                        t.Name)
                Next

                ' Display the ObfuscationAttribute properties
                ' for each member in the type.
                For Each m As MemberInfo In t.GetMembers()
                    Dim mAttrs() As Object = _
                        m.GetCustomAttributes( _
                            GetType(ObfuscationAttribute), _
                            False)

                    For Each a As Attribute In mAttrs
                        ShowObfuscation(CType(a, ObfuscationAttribute), _
                            t.Name & "." & m.Name)
                    Next
                Next
            End If
        Next
    End Sub

    Private Shared Sub ShowObfuscateAssembly( _
        ByVal ob As ObfuscateAssemblyAttribute)
        
        Console.WriteLine(vbCrLf & "ObfuscateAssemblyAttribute properties:")
        Console.WriteLine("   AssemblyIsPrivate: " _
            & ob.AssemblyIsPrivate)
        Console.WriteLine("   StripAfterObfuscation: " _
            & ob.StripAfterObfuscation)

    End Sub

    Private Shared Sub ShowObfuscation( _
        ByVal ob As ObfuscationAttribute, _
        ByVal target As String)
        
        Console.WriteLine(vbCrLf _
            & "ObfuscationAttribute properties for: " _
            & target)
        Console.WriteLine("   Exclude: " & ob.Exclude)
        Console.WriteLine("   Feature: " & ob.Feature)
        Console.WriteLine("   StripAfterObfuscation: " _
            & ob.StripAfterObfuscation)
        Console.WriteLine("   ApplyToMembers: " & ob.ApplyToMembers)

    End Sub
End Class

' This code example produces the following output:
'
'ObfuscateAssemblyAttribute properties:
'   AssemblyIsPrivate: False
'   StripAfterObfuscation: True
'
'ObfuscationAttribute properties for: Type1.MethodA
'   Exclude: True
'   Feature: all
'   StripAfterObfuscation: True
'   ApplyToMembers: True
'
'ObfuscationAttribute properties for: Type2
'   Exclude: True
'   Feature: all
'   StripAfterObfuscation: True
'   ApplyToMembers: False
'
'ObfuscationAttribute properties for: Type2.MethodA
'   Exclude: False
'   Feature: default
'   StripAfterObfuscation: False
'   ApplyToMembers: True

Remarks

ObfuscationAttribute И ObfuscateAssemblyAttribute атрибуты позволяют разработчикам сборку для добавления заметок к их двоичные файлы, так что средствам запутывания может обработать их правильно с минимальной конфигурацией внешних.The ObfuscationAttribute and ObfuscateAssemblyAttribute attributes allow assembly authors to annotate their binaries so that obfuscation tools can process them correctly with minimal external configuration.

Важно!

Применение этого атрибута не скрывает сущности кода, к которому он применяется автоматически.Applying this attribute does not automatically obfuscate the code entity to which you apply it. Применение атрибута является альтернативой созданию файла конфигурации для средства запутывания.Applying the attribute is an alternative to creating a configuration file for the obfuscation tool. То есть он просто предоставляет инструкции для средства запутывания.That is, it merely provides instructions for an obfuscation tool. Корпорация Майкрософт рекомендует, что поставщики средствам запутывания Следуйте описанной здесь семантики.Microsoft recommends that vendors of obfuscation tools follow the semantics described here. Тем не менее нет никакой гарантии, что конкретного следует рекомендациям Майкрософт.However, there is no guarantee that a particular tool follows Microsoft recommendations.

ObfuscationAttribute Атрибут имеет строку Feature свойство.The ObfuscationAttribute attribute has a string Feature property. Средства запутывания могут сопоставлять строковые значения этого свойства на компоненты, которые они реализуют, предпочтительно с помощью XML-файл конфигурации, который пользователи могут обращаться к.Obfuscation tools can map the string values of this property to features they implement, preferably by using an XML configuration file that users can access. ObfuscationAttribute Определяет строк два компонента, «default» и «все».The ObfuscationAttribute defines two feature strings, "default" and "all". Для средства запутывания по умолчанию должен соответствовать строка «default» и «all» следует сопоставить с полным набором функций запутывания, поддерживаемых средством.The string "default" should map to the default obfuscation features of a tool, and "all" should map to the complete set of obfuscation features supported by a tool. Значение по умолчанию Feature свойство «all», включение полного набора функций запутывания.The default value of the Feature property is "all", enabling the complete set of obfuscation features.

При применении к сборке, ObfuscationAttribute также применяется ко всем типам в сборке.When applied to an assembly, ObfuscationAttribute also applies to all types within the assembly. Если ApplyToMembers свойства не указан или имеет значение true, применяется ко всем элементам, а также атрибут.If the ApplyToMembers property is not specified, or is set to true, the attribute applies to all members as well. ObfuscationAttribute не указывает, является ли сборка общедоступными или частными.ObfuscationAttribute does not specify whether an assembly is public or private. Чтобы указать, является ли сборка общедоступный или частный, используйте ObfuscateAssemblyAttribute атрибута.To specify whether an assembly is public or private, use the ObfuscateAssemblyAttribute attribute.

При применении к классы и структуры, ObfuscationAttribute также применяется ко всем членам типа, если ApplyToMembers свойства не указан или имеет значение true.When applied to classes and structures, ObfuscationAttribute also applies to all members of the type if the ApplyToMembers property is not specified, or is set to true.

При применении к методам, параметры, поля и свойства, атрибут влияет только сущности, к которому он применяется.When applied to methods, parameters, fields, and properties, the attribute affects only the entity to which it is applied.

Constructors

ObfuscationAttribute() ObfuscationAttribute() ObfuscationAttribute() ObfuscationAttribute()

Инициализирует новый экземпляр класса ObfuscationAttribute. Initializes a new instance of the ObfuscationAttribute class.

Properties

ApplyToMembers ApplyToMembers ApplyToMembers ApplyToMembers

Возвращает или задает значение Boolean, которое указывает, должен ли атрибут определенного типа быть применен к членам этого типа. Gets or sets a Boolean value indicating whether the attribute of a type is to apply to the members of the type.

Exclude Exclude Exclude Exclude

Возвращает или задает значение Boolean, указывающее, должно ли средство запутывания исключить тип или член из операции запутывания. Gets or sets a Boolean value indicating whether the obfuscation tool should exclude the type or member from obfuscation.

Feature Feature Feature Feature

Возвращает или задает строковое значение, которое распознается средством запутывания и определяет параметры обработки. Gets or sets a string value that is recognized by the obfuscation tool, and which specifies processing options.

StripAfterObfuscation StripAfterObfuscation StripAfterObfuscation StripAfterObfuscation

Возвращает или задает значение Boolean, указывающее, должно и средство запутывания удалить данный атрибут по окончании его обработки. Gets or sets a Boolean value indicating whether the obfuscation tool should remove this attribute after processing.

TypeId TypeId TypeId TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute. When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

Methods

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту. Returns a value that indicates whether this instance is equal to a specified object.

(Inherited from Attribute)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Возвращает хэш-код данного экземпляра. Returns the hash code for this instance.

(Inherited from Attribute)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.

(Inherited from Object)
IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute() IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса. When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Inherited from Attribute)
Match(Object) Match(Object) Match(Object) Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту. When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Inherited from Attribute)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.

(Inherited from Object)

Explicit Interface Implementations

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. Maps a set of names to a corresponding set of dispatch identifiers.

(Inherited from Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса. Retrieves the type information for an object, which can be used to get the type information for an interface.

(Inherited from Attribute)
_Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32) _Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Inherited from Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта. Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Applies to

See Also