Lire en anglais

Partager via


AppDomain.Load Méthode

Définition

Charge Assembly dans ce domaine d'application.

Surcharges

Load(Byte[])

Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis.

Load(AssemblyName)

Charge Assembly en fonction de son AssemblyName.

Load(String)

Charge Assembly en fonction de son nom complet.

Load(Byte[], Byte[])

Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. Les octets bruts représentant les symboles de Assembly sont également chargés.

Load(AssemblyName, Evidence)
Obsolète.

Charge Assembly en fonction de son AssemblyName.

Load(String, Evidence)
Obsolète.

Charge Assembly en fonction de son nom complet.

Load(Byte[], Byte[], Evidence)
Obsolète.

Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. Les octets bruts représentant les symboles de Assembly sont également chargés.

Load(Byte[])

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis.

C#
public System.Reflection.Assembly Load (byte[] rawAssembly);

Paramètres

rawAssembly
Byte[]

Tableau de type byte qui est une image au format COFF contenant un assembly émis.

Retours

Assembly chargé.

Implémente

Exceptions

rawAssembly a la valeur null.

rawAssembly n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

Exemples

L’exemple suivant illustre l’utilisation du chargement d’un assembly brut.

Pour que cet exemple de code s’exécute, vous devez fournir le nom complet de l’assembly. Pour plus d’informations sur la façon d’obtenir le nom complet de l’assembly, consultez Noms d’assembly.

C#
using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class LoadRawSnippet {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   // Loads the content of a file to a byte array.
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      fs.Close();

      return buffer;
   }

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly(domain);

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;
   }

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      assemblyBuilder.Save("temp.dll");
   }
}

Remarques

Pour plus d’informations communes à toutes les surcharges de cette méthode, consultez la surcharge de Load(AssemblyName) méthode.

À compter de .NET Framework 4, le niveau d’approbation d’un assembly chargé à l’aide de cette méthode est identique au niveau d’approbation du domaine d’application.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET 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, 2.1

Load(AssemblyName)

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Charge Assembly en fonction de son AssemblyName.

C#
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef);

Paramètres

assemblyRef
AssemblyName

Objet qui décrit l'assembly à charger.

Retours

Assembly chargé.

Implémente

Exceptions

assemblyRef a la valeur null.

assemblyRef est introuvable.

assemblyRef n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

Remarques

Cette méthode doit être utilisée uniquement pour charger un assembly dans le domaine d’application actuel. Cette méthode est fournie à titre pratique pour les appelants d’interopérabilité qui ne peuvent pas appeler la méthode statique Assembly.Load . Pour charger des assemblys dans d’autres domaines d’application, utilisez une méthode telle que CreateInstanceAndUnwrap.

Si une version de l’assembly demandé est déjà chargée, cette méthode retourne l’assembly chargé, même si une autre version est demandée.

La fourniture d’un nom d’assembly partiel pour assemblyRef n’est pas recommandée. (Un nom partiel omet un ou plusieurs jetons de culture, de version ou de clé publique. Pour les surcharges qui prennent une chaîne au lieu d’un AssemblyName objet, « MyAssembly, Version=1.0.0.0 » est un exemple de nom partiel et « MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47 » est un exemple de nom complet.) L’utilisation de noms partiels a un effet négatif sur les performances. En outre, un nom d’assembly partiel peut charger un assembly à partir du global assembly cache uniquement s’il existe une copie exacte de l’assembly dans le répertoire de base de l’application (BaseDirectory ou AppDomainSetup.ApplicationBase).

Si l’objet actuel AppDomain représente le domaine Ad’application et que la Load méthode est appelée à partir du domaine Bd’application , l’assembly est chargé dans les deux domaines d’application. Par exemple, le code suivant se charge MyAssembly dans le nouveau domaine ChildDomain d’application et également dans le domaine d’application où le code s’exécute :

C#
AppDomain ad = AppDomain.CreateDomain("ChildDomain");
ad.Load("MyAssembly");

L’assembly est chargé dans les deux domaines, car Assembly il ne dérive pas de MarshalByRefObject, et par conséquent, la valeur de retour de la Load méthode ne peut pas être marshalée. Au lieu de cela, le Common Language Runtime tente de charger l’assembly dans le domaine d’application appelant. Les assemblys chargés dans les deux domaines d’application peuvent être différents si les paramètres de chemin d’accès des deux domaines d’application sont différents.

Note

Si la AssemblyName.Name propriété et la AssemblyName.CodeBase propriété sont définies, la première tentative de chargement de l’assembly utilise le nom d’affichage (y compris la version, la culture, etc., comme retourné par la Assembly.FullName propriété). Si le fichier est introuvable, la CodeBase propriété est utilisée pour rechercher l’assembly. Si l’assembly est trouvé à l’aide CodeBasede , le nom d’affichage est mis en correspondance avec l’assembly. Si la correspondance échoue, un FileLoadException est levée.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET 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, 2.1

Load(String)

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Charge Assembly en fonction de son nom complet.

C#
public System.Reflection.Assembly Load (string assemblyString);

Paramètres

assemblyString
String

Nom complet de l'assembly. Consultez FullName.

Retours

Assembly chargé.

Implémente

Exceptions

assemblyString a la valeur null.

assemblyString est introuvable.

assemblyString n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

Remarques

Pour plus d’informations communes à toutes les surcharges de cette méthode, consultez la surcharge de Load(AssemblyName) méthode.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET 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, 2.1

Load(Byte[], Byte[])

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. Les octets bruts représentant les symboles de Assembly sont également chargés.

C#
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[]? rawSymbolStore);
C#
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore);

Paramètres

rawAssembly
Byte[]

Tableau de type byte qui est une image au format COFF contenant un assembly émis.

rawSymbolStore
Byte[]

Tableau de type byte contenant les octets bruts représentant les symboles de l'assembly.

Retours

Assembly chargé.

Implémente

Exceptions

rawAssembly a la valeur null.

rawAssembly n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

Exemples

L’exemple suivant illustre l’utilisation du chargement d’un assembly brut.

Pour que cet exemple de code s’exécute, vous devez fournir le nom complet de l’assembly. Pour plus d’informations sur la façon d’obtenir le nom complet de l’assembly, consultez Noms d’assembly.

C#
using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class LoadRawSnippet {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   // Loads the content of a file to a byte array.
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      fs.Close();

      return buffer;
   }

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly(domain);

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;
   }

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      assemblyBuilder.Save("temp.dll");
   }
}

Remarques

Pour plus d’informations communes à toutes les surcharges de cette méthode, consultez la surcharge de Load(AssemblyName) méthode.

À compter de .NET Framework 4, le niveau d’approbation d’un assembly chargé à l’aide de cette méthode est identique au niveau d’approbation du domaine d’application.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET 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, 2.1

Load(AssemblyName, Evidence)

Attention

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

Charge Assembly en fonction de son AssemblyName.

C#
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity);
C#
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity);

Paramètres

assemblyRef
AssemblyName

Objet qui décrit l'assembly à charger.

assemblySecurity
Evidence

Preuve de chargement de l'assembly.

Retours

Assembly chargé.

Implémente

Attributs

Exceptions

assemblyRef a la valeur null.

assemblyRef est introuvable.

assemblyRef n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

Remarques

Pour plus d’informations communes à toutes les surcharges de cette méthode, consultez la surcharge de Load(AssemblyName) méthode.

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions (Obsolète)
.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)

Load(String, Evidence)

Attention

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

Charge Assembly en fonction de son nom complet.

C#
public System.Reflection.Assembly Load (string assemblyString, System.Security.Policy.Evidence assemblySecurity);
C#
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (string assemblyString, System.Security.Policy.Evidence assemblySecurity);

Paramètres

assemblyString
String

Nom complet de l'assembly. Consultez FullName.

assemblySecurity
Evidence

Preuve de chargement de l'assembly.

Retours

Assembly chargé.

Implémente

Attributs

Exceptions

assemblyString a la valeur null.

assemblyString est introuvable.

assemblyString n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

Remarques

Pour plus d’informations communes à toutes les surcharges de cette méthode, consultez la surcharge de Load(AssemblyName) méthode.

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions (Obsolète)
.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)

Load(Byte[], Byte[], Evidence)

Attention

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.

Charge Assembly avec l'image au format COFF (Common Object File Format) contenant un Assembly émis. Les octets bruts représentant les symboles de Assembly sont également chargés.

C#
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence);
C#
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of Load which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence);

Paramètres

rawAssembly
Byte[]

Tableau de type byte qui est une image au format COFF contenant un assembly émis.

rawSymbolStore
Byte[]

Tableau de type byte contenant les octets bruts représentant les symboles de l'assembly.

securityEvidence
Evidence

Preuve de chargement de l'assembly.

Retours

Assembly chargé.

Implémente

Attributs

Exceptions

rawAssembly a la valeur null.

rawAssembly n’est pas un assembly valide pour le runtime actuellement chargé.

L’opération est tentée sur un domaine d’application non chargé.

Un assembly ou un module a été chargé à deux reprises avec deux preuves différentes.

securityEvidence n’est pas un null. Quand la stratégie CAS héritée n’est pas activée, securityEvidence doit être null.

Exemples

L’exemple suivant illustre l’utilisation du chargement d’un assembly brut.

Pour que cet exemple de code s’exécute, vous devez fournir le nom complet de l’assembly. Pour plus d’informations sur la façon d’obtenir le nom complet de l’assembly, consultez Noms d’assembly.

C#
using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class LoadRawSnippet {
   public static void Main() {
      AppDomain currentDomain = AppDomain.CurrentDomain;

      InstantiateMyType(currentDomain);   // Failed!

      currentDomain.AssemblyResolve += new ResolveEventHandler(MyResolver);

      InstantiateMyType(currentDomain);   // OK!
   }

   static void InstantiateMyType(AppDomain domain) {
      try {
     // You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType");
      } catch (Exception e) {
         Console.WriteLine(e.Message);
      }
   }

   // Loads the content of a file to a byte array.
   static byte[] loadFile(string filename) {
      FileStream fs = new FileStream(filename, FileMode.Open);
      byte[] buffer = new byte[(int) fs.Length];
      fs.Read(buffer, 0, buffer.Length);
      fs.Close();

      return buffer;
   }

   static Assembly MyResolver(object sender, ResolveEventArgs args) {
      AppDomain domain = (AppDomain) sender;

      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly(domain);

      byte[] rawAssembly = loadFile("temp.dll");
      byte[] rawSymbolStore = loadFile("temp.pdb");
      Assembly assembly = domain.Load(rawAssembly, rawSymbolStore);

      return assembly;
   }

   // Creates a dynamic assembly with symbol information
   // and saves them to temp.dll and temp.pdb
   static void EmitAssembly(AppDomain domain) {
      AssemblyName assemblyName = new AssemblyName();
      assemblyName.Name = "MyAssembly";

      AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save);
      ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", true);
      TypeBuilder typeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public);

      ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
      ILGenerator ilGenerator = constructorBuilder.GetILGenerator();
      ilGenerator.EmitWriteLine("MyType instantiated!");
      ilGenerator.Emit(OpCodes.Ret);

      typeBuilder.CreateType();

      assemblyBuilder.Save("temp.dll");
   }
}

Remarques

Pour plus d’informations communes à toutes les surcharges de cette méthode, consultez la surcharge de Load(AssemblyName) méthode.

À compter de .NET Framework 4, le niveau d’approbation d’un assembly chargé à l’aide de cette méthode est identique au niveau d’approbation du domaine d’application.

S’applique à

.NET Framework 4.8.1 et autres versions
Produit Versions (Obsolète)
.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)