Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase ObfuscationAttribute

 

Publicado: octubre de 2016

Indica a las herramientas de ofuscación que tomen las acciones especificadas para un ensamblado, tipo o miembro.

Espacio de nombres:   System.Reflection
Ensamblado:  mscorlib (en 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

NombreDescripción
System_CAPS_pubmethodObfuscationAttribute()

Inicializa una nueva instancia de la clase ObfuscationAttribute.

NombreDescripción
System_CAPS_pubpropertyApplyToMembers

Obtiene o establece un Boolean que indica si el atributo de un tipo se aplican a los miembros del tipo de valor.

System_CAPS_pubpropertyExclude

Obtiene o establece un Boolean valor que indica si la herramienta de ofuscación debe excluir de ofuscación el tipo o miembro.

System_CAPS_pubpropertyFeature

Obtiene o establece un valor de cadena que es reconocido por la herramienta de ofuscación y que especifica opciones de procesamiento.

System_CAPS_pubpropertyStripAfterObfuscation

Obtiene o establece un Boolean valor que indica si la herramienta de ofuscación debe quitar este atributo tras el procesamiento.

System_CAPS_pubpropertyTypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.(Heredado de Attribute).

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Esta API admite la infraestructura producto y no está diseñada para usarse directamente desde el código. Devuelve un valor que indica si esta instancia equivale al objeto especificado. (Heredado de Attribute).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Heredado de Attribute).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodIsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.(Heredado de Attribute).

System_CAPS_pubmethodMatch(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual al objeto especificado. (Heredado de Attribute).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa al objeto actual. (Heredado de Object).

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información del tipo de un objeto, que puede utilizarse para obtener la información del tipo de una interfaz. (Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de tipo de información que suministra un objeto (0 ó 1)

(Heredado de Attribute).

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

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.(Heredado de Attribute).

El ObfuscationAttribute y ObfuscateAssemblyAttribute permiten a los creadores de ensamblados anotar sus archivos binarios para que las herramientas de ofuscación puedan procesarlos correctamente con la mínima configuración externa.

System_CAPS_importantImportante

Al aplicar este atributo no ofusca automáticamente la entidad de código al que se aplica. Aplicar el atributo es una alternativa a la creación de un archivo de configuración para la herramienta de ofuscación. Es decir, simplemente proporciona instrucciones para una herramienta de ofuscación. Microsoft recomienda que los proveedores de herramientas de ofuscación sigan la semántica descrita aquí. Sin embargo, no hay ninguna garantía de que una herramienta concreta siga las recomendaciones de Microsoft.

El ObfuscationAttribute atributo tiene una cadena Feature propiedad. Las herramientas de ofuscación pueden asignar los valores de cadena de esta propiedad a características que se implementan, preferiblemente utilizando un archivo de configuración XML que pueden tener acceso los usuarios. El ObfuscationAttribute define dos cadenas de características, "default" y "all". La cadena "predeterminado" se debe asignar a las características de ofuscación predeterminadas de una herramienta y "" se debe asignar al conjunto completo de características de ofuscación admitidas por una herramienta. El valor predeterminado de la Feature propiedad es "all", lo que permite el conjunto completo de características de ofuscación.

Cuando se aplica a un ensamblado, ObfuscationAttribute también se aplica a todos los tipos del ensamblado. Si el ApplyToMembers propiedad no se especifica o se establece en true, el atributo se aplica a todos los miembros así. ObfuscationAttribute no especifica si un ensamblado es público o privado. Para especificar si un ensamblado es público o privado, utilice el ObfuscateAssemblyAttribute atributo.

Cuando se aplica a las clases y estructuras, ObfuscationAttribute también se aplica a todos los miembros del tipo si el ApplyToMembers propiedad no se especifica o se establece en true.

Cuando se aplica a métodos, parámetros, campos y propiedades, el atributo afecta únicamente a la entidad a la que se aplica.

En el ejemplo de código siguiente se muestra un ensamblado público con dos tipos: Type1 y Type2. El ensamblado se marca para ofuscación con el ObfuscateAssemblyAttribute, que marca el ensamblado se traten como público (es decir, el AssemblyIsPrivate propiedad es false).

Type1 se marca para ofuscación porque el ensamblado se marca para ofuscación. Un miembro de Type1 se excluye de ofuscación, usando la Exclude propiedad.

Type2 se excluye de ofuscación, pero sus miembros se marcan para ofuscación porque el ApplyToMembers propiedad es false.

El MethodA método Type2 se marca con el valor "default" para el Feature propiedad. Es necesario especificar false para el Exclude propiedad para evitar excepto MethodA de ofuscación, porque el valor predeterminado para el Exclude propiedad es true. La herramienta de ofuscación no debe quitar el atributo tras la ofuscación porque el StripAfterObfuscation propiedad es false. Todos los atributos de este ejemplo de código se quitan tras la ofuscación porque el StripAfterObfuscation propiedad no se ha especificado y, por tanto, tiene como valor predeterminado true.

El ejemplo de código incluye código para mostrar los atributos y sus propiedades. También puede examinar los atributos abriendo el archivo DLL con la 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
Disponible desde 2.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: