Cette documentation est archivée et n’est pas conservée.

ObfuscationAttribute, classe

Remarque : cette classe est nouvelle dans le .NET Framework version 2.0.

Fait en sorte que les outils d'obscurcissement prennent les mesures spécifiées pour un assembly, un type ou un membre.

Espace de noms : System.Reflection
Assembly : mscorlib (dans mscorlib.dll)

[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
/** @attribute 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) */ 
/** @attribute ComVisibleAttribute(true) */ 
public final class ObfuscationAttribute extends Attribute
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 final class ObfuscationAttribute extends Attribute

Les attributs ObfuscationAttribute et ObfuscateAssemblyAttribute permettent aux créateurs d'assembly d'annoter leurs binaires afin que les outils d'obscurcissement puissent les traiter correctement avec une configuration externe minimale.

RemarqueImportant :

L'application de cet attribut n'obscurcit pas automatiquement l'entité de code à laquelle vous l'appliquez. L'application de l'attribut est une alternative à la création d'un fichier de configuration pour l'outil d'obscurcissement. Autrement dit, il fournit simplement des instructions à un outil d'obscurcissement. Microsoft recommande que les fournisseurs d'outils d'obscurcissement suivent la sémantique décrite ici. Cependant, rien ne garantit qu'un outil particulier suive les recommandations de Microsoft.

L'attribut ObfuscationAttribute a une propriété Feature de chaîne. Les outils d'obscurcissement peuvent mapper les valeurs de chaîne de cette propriété à des fonctionnalités qu'ils implémentent, de préférence au moyen d'un fichier de configuration XML auquel les utilisateurs peuvent accéder. Le ObfuscationAttribute définit deux chaînes de fonctionnalité, "default" et "all". La chaîne "default" doit mapper aux fonctionnalités d'obscurcissement par défaut d'un outil et "all" doit mapper au jeu complet de fonctionnalités d'obscurcissement pris en charge par un outil. La valeur par défaut de la propriété Feature est "all", ce qui active le jeu complet de fonctionnalités d'obscurcissement.

Lorsqu'il est appliqué à un assembly, ObfuscationAttribute s'applique également à tous les types dans l'assembly. Si la propriété ApplyToMembers n'est pas spécifiée ou a la valeur true, l'attribut s'applique également à tous les membres. ObfuscationAttribute ne spécifie pas si un assembly est public ou privé. Pour spécifier si un assembly est public ou privé, utilisez l'attribut ObfuscateAssemblyAttribute.

Lorsqu'il est appliqué à des classes et des structures, ObfuscationAttribute s'applique également à tous les membres du type si la propriété ApplyToMembers n'est pas spécifiée ou a la valeur true.

Lorsqu'il est appliqué à des méthodes, des paramètres, des champs et des propriétés, l'attribut affecte uniquement l'entité à laquelle il s'applique.

L'exemple de code suivant montre un assembly public avec deux types : Type1 et Type2. L'assembly est marqué pour l'obscurcissement avec ObfuscateAssemblyAttribute, qui indique que l'assembly doit être traité comme public (autrement dit, la propriété AssemblyIsPrivate est false).

Type1 est marqué pour l'obfuscation, car l'assembly est marqué pour l'obscurcissement. Un membre de Type1 est exclu de l'obscurcissement, à l'aide de la propriété Exclude.

Type2 est exclu de l'obscurcissement, mais ses membres sont marqués pour l'obscurcissement, car la propriété ApplyToMembers est false.

La méthode MethodA de Type2 est marquée avec la valeur "default" pour la propriété Feature. Il est nécessaire de spécifier false pour la propriété Exclude afin d'éviter d'exclure MethodA de l'obscurcissement, car la valeur par défaut de la propriété Exclude est true. L'outil d'obscurcissement ne doit pas supprimer l'attribut après l'obscurcissement, car la propriété StripAfterObfuscation est false. Tous les autres attributs de cet exemple de code sont supprimés après l'obscurcissement, car la propriété StripAfterObfuscation n'est pas spécifiée (et assume par conséquent la valeur par défaut true).

L'exemple de code inclut du code pour afficher les attributs et leurs propriétés. Vous pouvez également examiner les attributs en ouvrant la DLL avec MSIL Disassembler (Ildasm.exe).

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 = Assembly.GetExecutingAssembly();
        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
 */

System.Object
   System.Attribute
    System.Reflection.ObfuscationAttribute

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0
Afficher: