ObfuscationAttribute ObfuscationAttribute ObfuscationAttribute ObfuscationAttribute Class

Definition

Weist Verbergungstools an, die angegebenen Aktionen für eine Assembly, einen Typ oder einen Member auszuführen.Instructs obfuscation tools to take the specified actions for an assembly, type, or member.

public ref class ObfuscationAttribute sealed : Attribute
[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
Vererbung
ObfuscationAttributeObfuscationAttributeObfuscationAttributeObfuscationAttribute
Attribute

Beispiele

Das folgende Codebeispiel zeigt eine öffentliche Assembly mit zwei Typen: Type1 und Type2.The following code example shows a public assembly with two types: Type1 and Type2. Die Assembly ist für die Verschleierung mit dem ObfuscateAssemblyAttributegekennzeichnet, wodurch die Assembly als öffentlich behandelt wird (das heißt, die AssemblyIsPrivate -Eigenschaft ist 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).

Type1ist für die Verschleierung gekennzeichnet, da die Assembly für die Verschleierung markiert ist.Type1 is marked for obfuscation because the assembly is marked for obfuscation. Ein Member von Type1 wird mithilfe der-Eigenschaft von der Exclude Verschleierung ausgeschlossen.One member of Type1 is excluded from obfuscation, using the Exclude property.

Type2wird von der Verschleierung ausgeschlossen, aber die zugehörigen Member werden für die Verschleierung gekennzeichnet, da die ApplyToMembers -Eigenschaft ist. falseType2 is excluded from obfuscation, but its members are marked for obfuscation because the ApplyToMembers property is false.

Die MethodA -Methode Type2 von ist mit dem Wert "default" für die Feature -Eigenschaft gekennzeichnet.The MethodA method of Type2 is marked with the value "default" for the Feature property. Es muss false für die Exclude -Eigenschaft angegeben werden, um zu MethodA vermeiden, dass eine Verschleierung ausgeschlossen wird, da der Standard Exclude Wert für truedie-Eigenschaft ist.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. Das verfuskationstool sollte das Attribut nach der Verschleierung nicht entfernen, da die StripAfterObfuscation -Eigenschaft ist. falseThe obfuscation tool should not strip the attribute after obfuscation because the StripAfterObfuscation property is false. Alle anderen Attribute in diesem Codebeispiel werden nach der Verschleierung entfernt, da die StripAfterObfuscation -Eigenschaft nicht angegeben ist und daher standardmäßig auf truefestgelegt ist.All the other attributes in this code example are stripped after obfuscation, because the StripAfterObfuscation property is not specified, and therefore defaults to true.

Das Codebeispiel enthält Code zum Anzeigen der Attribute und ihrer Eigenschaften.The code example includes code to display the attributes and their properties. Sie können die Attribute auch überprüfen, indem Sie die DLL mit dem Ildasm. exe (IL-Disassembler)öffnen.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

Hinweise

Mit ObfuscationAttribute den ObfuscateAssemblyAttribute Attributen und können Assemblyautoren Ihre Binärdateien mit Anmerkungen versehen, damit Sie von den verfuskations Tools mit minimaler externer Konfiguration ordnungsgemäß verarbeitet werden können.The ObfuscationAttribute and ObfuscateAssemblyAttribute attributes allow assembly authors to annotate their binaries so that obfuscation tools can process them correctly with minimal external configuration.

Wichtig

Durch das Anwenden dieses Attributs wird die Code Entität, auf die Sie Sie anwenden, nicht automatisch verdeckt.Applying this attribute does not automatically obfuscate the code entity to which you apply it. Das Anwenden des-Attributs ist eine Alternative zum Erstellen einer Konfigurationsdatei für das obfuskationstool.Applying the attribute is an alternative to creating a configuration file for the obfuscation tool. Das heißt, es enthält lediglich Anweisungen für ein verfuskationstool.That is, it merely provides instructions for an obfuscation tool. Microsoft empfiehlt, dass die Anbieter von obfuskations Tools der hier beschriebenen Semantik folgen.Microsoft recommends that vendors of obfuscation tools follow the semantics described here. Es gibt jedoch keine Garantie dafür, dass ein bestimmtes Tool Microsoft-Empfehlungen folgt.However, there is no guarantee that a particular tool follows Microsoft recommendations.

Das ObfuscationAttribute Attribut verfügt über eine Feature Zeichen folgen Eigenschaft.The ObfuscationAttribute attribute has a string Feature property. Obfuskations Tools können die Zeichen folgen Werte dieser Eigenschaft den von Ihnen implementierten Funktionen zuordnen, vorzugsweise mithilfe einer XML-Konfigurationsdatei, auf die Benutzer zugreifen können.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 Definiert zwei Funktions Zeichenfolgen: "Default" und "All".The ObfuscationAttribute defines two feature strings, "default" and "all". Die Zeichenfolge "Default" sollte den Standardfunktionen für die Verschleierung eines Tools zugeordnet werden, und "All" sollte dem vollständigen Satz von obfuskations Funktionen zugeordnet werden, die von einem Tool unterstützt werden.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. Der Standardwert Feature der Eigenschaft ist "All" und ermöglicht so den vollständigen Satz von Funktionen für die Verschleierung.The default value of the Feature property is "all", enabling the complete set of obfuscation features.

Wenn Sie auf eine Assembly angewendet ObfuscationAttribute wird, gilt auch für alle Typen in der Assembly.When applied to an assembly, ObfuscationAttribute also applies to all types within the assembly. Wenn die ApplyToMembers -Eigenschaft nicht angegeben oder auf truefestgelegt ist, gilt das Attribut auch für alle Member.If the ApplyToMembers property is not specified, or is set to true, the attribute applies to all members as well. ObfuscationAttributegibt nicht an, ob eine Assembly öffentlich oder privat ist.ObfuscationAttribute does not specify whether an assembly is public or private. Verwenden Sie das ObfuscateAssemblyAttribute -Attribut, um anzugeben, ob eine Assembly öffentlich oder privat ist.To specify whether an assembly is public or private, use the ObfuscateAssemblyAttribute attribute.

Wenn die Eigenschaft auf Klassen und Strukturen ObfuscationAttribute angewendet wird, gilt dies auch für alle Member des ApplyToMembers Typs, wenn die-Eigenschaft nicht angegeben ist trueoder wenn auf festgelegt ist.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.

Wenn das Attribut auf Methoden, Parameter, Felder und Eigenschaften angewendet wird, wirkt sich das Attribut nur auf die Entität aus, auf die es angewendet wird.When applied to methods, parameters, fields, and properties, the attribute affects only the entity to which it is applied.

Konstruktoren

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

Initialisiert eine neue Instanz der ObfuscationAttribute-Klasse.Initializes a new instance of the ObfuscationAttribute class.

Eigenschaften

ApplyToMembers ApplyToMembers ApplyToMembers ApplyToMembers

Ruft einen Boolean-Wert ab, der angibt, ob das Attribut eines Typs auf die Member des Typs angewendet wird, oder legt diesen Wert fest.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

Ruft einen Boolean-Wert ab, der angibt, ob das Verbergungstool den Typ oder Member vom Verbergen ausschließen soll, oder legt diesen Wert fest.Gets or sets a Boolean value indicating whether the obfuscation tool should exclude the type or member from obfuscation.

Feature Feature Feature Feature

Ruft einen Zeichenfolgenwert ab, der vom Verbergungstool erkannt wird und der Verarbeitungsoptionen angibt, oder legt diesen fest.Gets or sets a string value that is recognized by the obfuscation tool, and which specifies processing options.

StripAfterObfuscation StripAfterObfuscation StripAfterObfuscation StripAfterObfuscation

Ruft einen Boolean-Wert ab, der angibt, ob das Verbergungstool dieses Attribut nach der Verarbeitung entfernen soll, oder legt diesen Wert fest.Gets or sets a Boolean value indicating whether the obfuscation tool should remove this attribute after processing.

TypeId TypeId TypeId TypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.When implemented in a derived class, gets a unique identifier for this Attribute.

(Inherited from Attribute)

Methoden

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

Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.Returns a value that indicates whether this instance is equal to a specified object.

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

Gibt den Hashcode für diese Instanz zurück.Returns the hash code for this instance.

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

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

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

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.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)

Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht.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()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

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

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Inherited from Object)

Explizite Schnittstellenimplementierungen

_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)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.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)

Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können.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)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 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)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.Provides access to properties and methods exposed by an object.

(Inherited from Attribute)

Gilt für:

Siehe auch