ObfuscationAttribute Classe

Definizione

Indica agli strumenti di offuscamento di accettare le azioni specificate per un assembly, un tipo o un membro.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
Ereditarietà
ObfuscationAttribute
Attributi

Esempi

Nell'esempio di codice seguente viene illustrato un assembly pubblico con due Type1 tipi Type2: e.The following code example shows a public assembly with two types: Type1 and Type2. L'assembly è contrassegnato per l'offuscamento con ObfuscateAssemblyAttribute, che contrassegna l'assembly da trattare come pubblico (ovvero la AssemblyIsPrivate proprietà è 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è contrassegnato per l'offuscamento perché l'assembly è contrassegnato per l'offuscamento.Type1 is marked for obfuscation because the assembly is marked for obfuscation. Un membro di Type1 è escluso dall'offuscamento, usando Exclude la proprietà.One member of Type1 is excluded from obfuscation, using the Exclude property.

Type2viene escluso dall'offuscamento, ma i relativi membri sono contrassegnati per l'offuscamento, falseperché la ApplyToMembers proprietà è.Type2 is excluded from obfuscation, but its members are marked for obfuscation because the ApplyToMembers property is false.

Il MethodA metodo di Type2 è "default" contrassegnatoFeature con il valore della proprietà.The MethodA method of Type2 is marked with the value "default" for the Feature property. È necessario false specificare per la MethodA Exclude proprietà per evitare l'esclusione dall'offuscamento, perché l'impostazione predefinita per la Exclude proprietà è 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. Lo strumento di offuscamento non deve rimuovere l'attributo dopo l'offuscamento StripAfterObfuscation perché la falseproprietà è.The obfuscation tool should not strip the attribute after obfuscation because the StripAfterObfuscation property is false. Tutti gli altri attributi in questo esempio di codice vengono rimossi dopo l'offuscamento, perché StripAfterObfuscation la proprietà non è specificata e pertanto il valore predefinito 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.

Nell'esempio di codice viene incluso il codice per visualizzare gli attributi e le relative proprietà.The code example includes code to display the attributes and their properties. È anche possibile esaminare gli attributi aprendo la DLL con Ildasm. exe (DISASSEMBLER 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

Commenti

Gli ObfuscationAttribute attributi ObfuscateAssemblyAttribute e consentono agli autori di assembly di annotare i file binari in modo che gli strumenti di offuscamento possano elaborarli correttamente con una configurazione esterna minima.The ObfuscationAttribute and ObfuscateAssemblyAttribute attributes allow assembly authors to annotate their binaries so that obfuscation tools can process them correctly with minimal external configuration.

Importante

Se si applica questo attributo, l'entità di codice a cui viene applicata non viene offuscata automaticamente.Applying this attribute does not automatically obfuscate the code entity to which you apply it. L'applicazione dell'attributo rappresenta un'alternativa alla creazione di un file di configurazione per lo strumento di offuscamento.Applying the attribute is an alternative to creating a configuration file for the obfuscation tool. Ovvero fornisce semplicemente istruzioni per uno strumento di offuscamento.That is, it merely provides instructions for an obfuscation tool. Microsoft consiglia che i fornitori di strumenti di offuscamento seguano la semantica descritta qui.Microsoft recommends that vendors of obfuscation tools follow the semantics described here. Tuttavia, non vi è alcuna garanzia che un particolare strumento segua le raccomandazioni Microsoft.However, there is no guarantee that a particular tool follows Microsoft recommendations.

L' ObfuscationAttribute attributo ha una proprietà Feature di stringa.The ObfuscationAttribute attribute has a string Feature property. Gli strumenti di offuscamento possono eseguire il mapping dei valori stringa di questa proprietà alle funzionalità implementate, preferibilmente utilizzando un file di configurazione XML a cui gli utenti possono accedere.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 Definisce due stringhe di funzionalità, "default" e "All".The ObfuscationAttribute defines two feature strings, "default" and "all". La stringa "default" deve essere mappata alle funzionalità di offuscamento predefinite di uno strumento e "All" deve essere mappato al set completo di funzionalità di offuscamento supportate da uno strumento.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. Il valore predefinito della Feature proprietà è "All", abilitando il set completo di funzionalità di offuscamento.The default value of the Feature property is "all", enabling the complete set of obfuscation features.

Quando viene applicato a un assembly ObfuscationAttribute , si applica anche a tutti i tipi all'interno dell'assembly.When applied to an assembly, ObfuscationAttribute also applies to all types within the assembly. Se la ApplyToMembers proprietà non è specificata o è impostata su true, l'attributo si applica anche a tutti i membri.If the ApplyToMembers property is not specified, or is set to true, the attribute applies to all members as well. ObfuscationAttributenon specifica se un assembly è pubblico o privato.ObfuscationAttribute does not specify whether an assembly is public or private. Per specificare se un assembly è pubblico o privato, utilizzare l' ObfuscateAssemblyAttribute attributo.To specify whether an assembly is public or private, use the ObfuscateAssemblyAttribute attribute.

Quando viene applicato a classi e strutture ObfuscationAttribute , si applica anche a tutti i membri del tipo ApplyToMembers se la proprietà non è specificata o è impostata truesu.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.

Quando viene applicato a metodi, parametri, campi e proprietà, l'attributo influiscono solo sull'entità a cui viene applicato.When applied to methods, parameters, fields, and properties, the attribute affects only the entity to which it is applied.

Costruttori

ObfuscationAttribute()

Inizializza una nuova istanza della classe ObfuscationAttribute.Initializes a new instance of the ObfuscationAttribute class.

Proprietà

ApplyToMembers

Ottiene o imposta un valore Boolean che indica se l'attributo è un tipo da applicare ai membri del tipo.Gets or sets a Boolean value indicating whether the attribute of a type is to apply to the members of the type.

Exclude

Ottiene o imposta un valore Boolean che indica se lo strumento di offuscamento deve escludere il tipo o il membro dall'offuscamento.Gets or sets a Boolean value indicating whether the obfuscation tool should exclude the type or member from obfuscation.

Feature

Ottiene o imposta un valore stringa riconosciuto dallo strumento di offuscamento, che specifica le opzioni di elaborazione.Gets or sets a string value that is recognized by the obfuscation tool, and which specifies processing options.

StripAfterObfuscation

Ottiene o imposta un valore Boolean che indica se lo strumento di offuscamento deve rimuovere l'attributo al termine dell'elaborazione.Gets or sets a Boolean value indicating whether the obfuscation tool should remove this attribute after processing.

TypeId

Quando è implementata in una classe derivata, ottiene un identificatore univoco della classe Attribute.When implemented in a derived class, gets a unique identifier for this Attribute.

(Ereditato da Attribute)

Metodi

Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.Returns a value that indicates whether this instance is equal to a specified object.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per l'istanza.Returns the hash code for this instance.

(Ereditato da Attribute)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
IsDefaultAttribute()

In caso di override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.When overridden in a derived class, indicates whether the value of this instance is the default value for the derived class.

(Ereditato da Attribute)
Match(Object)

Quando è sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza equivale a un oggetto specificato.When overridden in a derived class, returns a value that indicates whether this instance equals a specified object.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

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

Esegue il mapping di un set di nomi a un set corrispondente di ID dispatch.Maps a set of names to a corresponding set of dispatch identifiers.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo relative a un oggetto, che possono essere usate per ottenere informazioni sul tipo relative a un'interfaccia.Retrieves the type information for an object, which can be used to get the type information for an interface.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero delle interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).Retrieves the number of type information interfaces that an object provides (either 0 or 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso a proprietà e metodi esposti da un oggetto.Provides access to properties and methods exposed by an object.

(Ereditato da Attribute)

Si applica a

Vedi anche