Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

ObfuscationAttribute-Klasse

 

Veröffentlicht: Oktober 2016

Weist das von Verbergungstools, die die angegebenen Aktionen für eine Assembly, Typ oder Member.

Namespace:   System.Reflection
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Attribute
    System.Reflection.ObfuscationAttribute

[AttributeUsageAttribute(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Parameter | AttributeTargets.Delegate, 
	AllowMultiple = true, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class ObfuscationAttribute : Attribute

NameBeschreibung
System_CAPS_pubmethodObfuscationAttribute()

Initialisiert eine neue Instanz der ObfuscationAttribute-Klasse.

NameBeschreibung
System_CAPS_pubpropertyApplyToMembers

Ruft ab oder legt einen Boolean Wert, der angibt, ob das Attribut eines Typs auf die Member des Typs angewendet wird.

System_CAPS_pubpropertyExclude

Ruft ab oder legt einen Boolean Wert, der angibt, ob das Verbergungstool von den Typ oder Member vom Verbergen ausschließen soll.

System_CAPS_pubpropertyFeature

Ruft ab oder legt einen Zeichenfolgenwert, der vom Tool Verschleierung erkannt wird und Verarbeitungsoptionen angibt.

System_CAPS_pubpropertyStripAfterObfuscation

Ruft ab oder legt einen Boolean Wert, der angibt, ob das Tool Verschleierung dieses Attribut nach der Verarbeitung entfernen soll.

System_CAPS_pubpropertyTypeId

Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab.(Geerbt von „Attribute“.)

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Diese API unterstützt die Produkt Infrastruktur und sollte nicht direkt aus dem Code verwendet werden. Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetHashCode()

Gibt den Hashcode für diese Instanz zurück.(Geerbt von „Attribute“.)

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodIsDefaultAttribute()

Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodMatch(Object)

Ruft beim Überschreiben in einer abgeleiteten Klasse gibt einen Wert, der angibt, ob diese Instanz gleich ein angegebenen Objekt ist.(Geerbt von „Attribute“.)

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_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.(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1).(Geerbt von „Attribute“.)

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit.(Geerbt von „Attribute“.)

Die ObfuscationAttribute und ObfuscateAssemblyAttribute Attribute ermöglichen, die Assembly Autoren ihre Binärdateien zu kommentieren, sodass Tools zur Verschleierung mit nur minimaler externer Konfiguration korrekt verarbeitet werden können.

System_CAPS_importantWichtig

Anwenden dieses Attributs wird nicht automatisch die Codeentität verbergen, die Sie anwenden. Anwenden des Attributs ist eine Alternative zum Erstellen einer Konfigurationsdatei für das Verbergungstool. D. h. beschrieben es lediglich ein Verbergungstool. Microsoft empfiehlt, Anbieter von Tools zur Verschleierung der hier beschriebenen Semantik folgen. Es ist jedoch keine Garantie dafür, dass ein bestimmtes Tool Microsoft Recommendations folgt.

Die ObfuscationAttribute Attribut hat eine Zeichenfolge Feature Eigenschaft. Tools zur Verschleierung können die Werte dieser Eigenschaft Funktionen zuordnen, die sie implementieren, die vorzugsweise mithilfe einer XML-Konfigurationsdatei, die Benutzer zugreifen können. Die ObfuscationAttribute definiert zwei Funktion Zeichenfolgen, "Default" und "alle". Die Zeichenfolge "Default" sollte zuordnen zu verbergen die Funktionen eines Tools sollte, und "alle" auf den vollständigen Satz der Verschleierung-Funktionen, die von einem Tool unterstützt. Der Standardwert der Feature Eigenschaft ist "all", aktivieren den vollständigen Satz von Funktionen verbergen.

Wenn auf eine Assembly angewendet ObfuscationAttribute gilt auch für alle Typen innerhalb der Assembly. Wenn die ApplyToMembers Eigenschaft nicht angegeben ist, oder auf true, das Attribut gilt für alle Elemente sowie. ObfuscationAttribute Gibt nicht an, ob eine Assembly öffentlich oder privat ist. Um anzugeben, ob eine Assembly öffentlich oder privat ist, verwenden die ObfuscateAssemblyAttribute Attribut.

Beim Anwenden auf Klassen und Strukturen, ObfuscationAttribute gilt auch für alle Member des Typs, wenn die ApplyToMembers Eigenschaft nicht angegeben ist, oder auf true.

Auf Methoden, Parameter, Felder und Eigenschaften angewendet wird, wirkt sich das Attribut nur auf die Entität, auf die es angewendet wird.

Im folgenden Codebeispiel wird eine öffentliche Assembly mit den beiden Typen: Type1 und Type2. Die Assembly gekennzeichnet ist, mit der ObfuscateAssemblyAttribute, die kennzeichnet, dass der Assembly als öffentlich behandelt werden (also die AssemblyIsPrivate Eigenschaft ist false).

Type1 ist zum Verbergen markiert, da die Assembly zum Verbergen markiert ist. Ein Mitglied des Type1 wird vom Verbergen ausgeschlossen, mit der Exclude Eigenschaft.

Type2 wird vom Verbergen ausgeschlossen, aber seine Member sind zum Verbergen markiert, da die ApplyToMembers Eigenschaft ist false.

Die MethodA Methode Type2 markiert ist, mit dem Wert "default" für die Feature Eigenschaft. Es ist erforderlich, geben Sie false für die Exclude Eigenschaft, um die Ausnahme zu vermeiden MethodA vom verbergen, da der Standardwert für die Exclude -Eigenschaft ist true. Das Tool Verschleierung sollte das Attribut nicht nach dem Verbergen entfernt werden, da die StripAfterObfuscation Eigenschaft ist false. Alle anderen Attribute in diesem Codebeispiel werden nach dem Verbergen entfernt, da die StripAfterObfuscation Eigenschaft nicht angegeben wird, und daher standardmäßig true.

Das Codebeispiel enthält Code, um die Attribute und ihre Eigenschaften anzuzeigen. Sie können die Attribute auch überprüfen, öffnen Sie die DLL mit der 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
 */

.NET Framework
Verfügbar seit 2.0

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: