Load Méthode (Byte[], Byte[])
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

AppDomain.Load, méthode (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.

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

public Assembly Load(
	byte[] rawAssembly,
	byte[] rawSymbolStore
)

Paramètres

rawAssembly

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

rawSymbolStore

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

Valeur de retour

Type: System.Reflection.Assembly

Assembly chargé.

Exception Condition
ArgumentNullException

rawAssembly a la valeur null.

BadImageFormatException

rawAssembly n'est pas un assembly valide.

ou

La version 2.0 ou ultérieure du common language runtime est actuellement chargée et rawAssembly a été compilé avec une version ultérieure.

AppDomainUnloadedException

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

FileLoadException

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

À partir de la .NET Framework 4, le niveau de confiance d'un assembly est chargé à l'aide de cette méthode est le même que le niveau de confiance du domaine d'application.

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

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

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

Pour exécuter cet exemple de code, vous devez fournir le nom d'assembly qualifié complet.Pour plus d'informations sur la façon d'obtenir le nom d'assembly qualifié complet, consultez Noms d'assemblys.

using System;
using System.IO;
using System.Reflection;
using System.Reflection.Emit;

class Test {
   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");
   }
}

WebPermission

for reading a URI that does not begin with "file://".

FileIOPermission

for access to read from a file or directory, and for access to the information in the path itself.Associated enumerations: FileIOPermissionAccess.Read, FileIOPermissionAccess.PathDiscovery.

.NET Framework
Disponible depuis 1.1
Retour au début
Afficher:
© 2016 Microsoft