AssemblyBuilder.SetCustomAttribute Méthode

Définition

Définit un attribut personnalisé sur cet assembly.

Surcharges

SetCustomAttribute(CustomAttributeBuilder)

Définissez un attribut personnalisé sur cet assembly à l’aide d’un générateur d’attributs personnalisés.

SetCustomAttribute(ConstructorInfo, Byte[])

Définit un attribut personnalisé sur cet assembly à l’aide d’un objet blob d’attribut personnalisé spécifié.

SetCustomAttribute(CustomAttributeBuilder)

Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs

Définissez un attribut personnalisé sur cet assembly à l’aide d’un générateur d’attributs personnalisés.

public void SetCustomAttribute (System.Reflection.Emit.CustomAttributeBuilder customBuilder);

Paramètres

customBuilder
CustomAttributeBuilder

Instance d’une classe d’assistance pour définir l’attribut personnalisé.

Exceptions

con a la valeur null.

L'appelant n'a pas l'autorisation requise.

Exemples

L’exemple de code suivant illustre l’utilisation de SetCustomAttribute dans , à AssemblyBuilderl’aide d’un CustomAttributeBuilder.

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute : Attribute
{
   public String s;
   public int x;

   public MyAttribute(String s, int x)
   {
      this.s = s;
      this.x = x;
   }
}

class MyApplication
{
   public static void Main()
   {
      Type customAttribute = CreateCallee(Thread.GetDomain());
      object[] attributes = customAttribute.Assembly.GetCustomAttributes(true);
      Console.WriteLine("MyAttribute custom attribute contains : ");
      for(int index=0; index < attributes.Length; index++)
      {
         if(attributes[index] is MyAttribute)
         {
            Console.WriteLine("s : " + ((MyAttribute)attributes[index]).s);
            Console.WriteLine("x : " + ((MyAttribute)attributes[index]).x);
            break;
         }
      }
   }

   private static Type CreateCallee(AppDomain domain)
   {
      AssemblyName myAssemblyName = new AssemblyName();
      myAssemblyName.Name = "EmittedAssembly";
      AssemblyBuilder myAssembly = domain.DefineDynamicAssembly(myAssemblyName,
         AssemblyBuilderAccess.Run);
      Type myType = typeof(MyAttribute);
      ConstructorInfo infoConstructor = myType.GetConstructor(new Type[2]{typeof(String), typeof(int)});
      CustomAttributeBuilder attributeBuilder =
         new CustomAttributeBuilder(infoConstructor, new object[2]{"Hello", 2});
      myAssembly.SetCustomAttribute(attributeBuilder);
      ModuleBuilder myModule = myAssembly.DefineDynamicModule("EmittedModule");
      // Define a public class named "HelloWorld" in the assembly.
      TypeBuilder helloWorldClass = myModule.DefineType("HelloWorld", TypeAttributes.Public);

      return(helloWorldClass.CreateType());
  }
}

Remarques

Notes

SetCustomAttribute ne peut pas être utilisé pour définir des attributs de sécurité déclaratifs. Utilisez l’une des surcharges de DefineDynamicAssembly qui prend les autorisations requises, facultatives et refusées.

Notes

À compter du .NET Framework 2.0 Service Pack 1, ce membre n’a plus besoin de ReflectionPermission l’indicateur ReflectionPermissionFlag.ReflectionEmit . (Consultez Problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1

SetCustomAttribute(ConstructorInfo, Byte[])

Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs

Définit un attribut personnalisé sur cet assembly à l’aide d’un objet blob d’attribut personnalisé spécifié.

public void SetCustomAttribute (System.Reflection.ConstructorInfo con, byte[] binaryAttribute);
[System.Runtime.InteropServices.ComVisible(true)]
public void SetCustomAttribute (System.Reflection.ConstructorInfo con, byte[] binaryAttribute);

Paramètres

con
ConstructorInfo

Le constructeur de l’attribut personnalisé.

binaryAttribute
Byte[]

Objet blob d’octets représentant les attributs.

Attributs

Exceptions

con ou binaryAttribute est null.

L'appelant n'a pas l'autorisation requise.

con n’est pas un objet RuntimeConstructorInfo.

Exemples

L’exemple de code suivant illustre l’utilisation de SetCustomAttribute pour attacher un attribut personnalisé à un assembly généré dynamiquement.

using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class MyAttribute : Attribute
{
   public bool s;

   public MyAttribute(bool s)
   {
      this.s = s;
   }
}

class MyApplication
{
   public static void Main()
   {
      Type customAttribute = CreateCallee(Thread.GetDomain());
      object[] attributes = customAttribute.Assembly.GetCustomAttributes(true);
      Console.WriteLine("MyAttribute custom attribute contains : ");
      for(int index=0; index < attributes.Length; index++)
      {
         if(attributes[index] is MyAttribute)
         {
            Console.WriteLine("s : " + ((MyAttribute)attributes[index]).s);
            break;
         }
      }
   }

   private static Type CreateCallee(AppDomain domain)
   {
      AssemblyName myAssemblyName = new AssemblyName();
      myAssemblyName.Name = "EmittedAssembly";
      AssemblyBuilder myAssembly = domain.DefineDynamicAssembly(myAssemblyName,
         AssemblyBuilderAccess.Run);
      Type myType = typeof(MyAttribute);
      ConstructorInfo infoConstructor = myType.GetConstructor(new Type[]{typeof(bool)});
      myAssembly.SetCustomAttribute(infoConstructor, new byte[]{01,00,01});
      ModuleBuilder myModule = myAssembly.DefineDynamicModule("EmittedModule");
      // Define a public class named "HelloWorld" in the assembly.
      TypeBuilder helloWorldClass = myModule.DefineType("HelloWorld", TypeAttributes.Public);

      return(helloWorldClass.CreateType());
  }
}

Remarques

Pour plus d’informations sur la mise en forme binaryAttribute, consultez la spécification des métadonnées dans Partition II de la spécification Cli (Common Language Infrastructure).

RuntimeConstructorInfo est un type spécial généré par le système. Il dérive de la ConstructorInfo classe , et tout ConstructorInfo objet que vous obtenez par la réflexion est en fait un instance de RuntimeConstructorInfo.

Notes

SetCustomAttribute ne peut pas être utilisé pour définir des attributs de sécurité déclaratifs. Utilisez l’une des surcharges de DefineDynamicAssembly qui prend les autorisations requises, facultatives et refusées.

Notes

À compter du .NET Framework 2.0 Service Pack 1, ce membre n’a plus besoin de ReflectionPermission l’indicateur ReflectionPermissionFlag.ReflectionEmit . (Consultez Problèmes de sécurité dans l’émission de réflexion.) Pour utiliser cette fonctionnalité, votre application doit cibler .NET Framework 3.5 ou version ultérieure.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided), 2.1