Exportovat (0) Tisk
Rozbalit vše
Tento článek byl přeložen strojově počítačem. Původní text zobrazíte přesunutím ukazatele myši nad jednotlivé věty článku. Další informace
Překlad
Originál

AppDomain.Load – metoda (Byte[], Byte[])

Zatížení Assembly společný objektu souboru podle formátu (COFF) obraz obsahující emitované Assembly. Raw bajtů představující symboly Assembly jsou načteny.

Obor názvů:  System
Sestavení:  mscorlib (v mscorlib.dll)

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

Parametry

rawAssembly
Typ: System.Byte[]
Pole typu byte tj založen COFF obraz obsahující emitovaného sestavení.
rawSymbolStore
Typ: System.Byte[]
Pole typu byte obsahující surového bajtů představující symboly pro sestavení.

Vrácená hodnota

Typ: System.Reflection.Assembly
Načtení sestavení.

Implementuje

_AppDomain.Load(Byte[], Byte[])

VýjimkaPodmínka
ArgumentNullException

rawAssembly je null.

BadImageFormatException

rawAssembly není platné sestavení.

-nebo-

Aktuálně je zaveden modul CLR verze 2.0 nebo novější a objekt rawAssembly byl zkompilován novější verzí.

AppDomainUnloadedException

Dojde k pokusu o operaci na uvolněné doméně aplikace.

FileLoadException

Sestavení nebo modul byly zavedeny dvakrát se dvěma různými legitimacemi.

Začínající .NET Framework 4, úroveň důvěryhodnosti sestavení, který je zaveden touto metodou je stejná jako úroveň důvěryhodnosti domény aplikace.

Tato metoda by měla být použita pouze k načtení sestavení do aktuální domény aplikace. Tato metoda je poskytována pro pohodlí volajících používající interoperabilitu, kteří nemohou volat statickou metodu Assembly.Load. Chcete-li načíst sestavení do jiných domén aplikace, použijte metodu CreateInstanceAndUnwrap.

Informace, které jsou společné pro všechny přetížení této metody, naleznete v tématu přetížení metody Load(AssemblyName).

Následující příklad ukazuje použití načtení raw sestavení.

Pro spuštění této ukázky kódu je nutné zadat plně kvalifikovaný název. Informace o postupu získání plně kvalifikovaného názvu sestavení naleznete v tématu Názvy sestavení.


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


.NET Framework

Podporováno v: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Podporováno v: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (role Server Core není podporována), Windows Server 2008 R2 (role Server Core je podporována s aktualizací SP1 nebo novější, architektura Itanium není podporována)

.NET Framework nepodporuje některé verze platforem. Seznam podporovaných verzí naleznete v tématu .NET – požadavky na systém.

Obsah vytvořený komunitou

Přidat
Zobrazit:
© 2014 Microsoft