Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo AppDomain.Load (Byte[], Byte[], Evidence)

 

Data di pubblicazione: ottobre 2016

obsoleteCodeEntityM:System.AppDomain.Load(System.Byte[],System.Byte[]) Nota: Questa API è ora obsoleta.

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato. Vengono caricati anche i byte non elaborati che rappresentano i simboli per l'oggetto Assembly.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

[ObsoleteAttribute("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.")]
[SecurityPermissionAttribute(SecurityAction.Demand, ControlEvidence = true)]
public Assembly Load(
	byte[] rawAssembly,
	byte[] rawSymbolStore,
	Evidence securityEvidence
)

Parametri

rawAssembly
Type: System.Byte[]

Matrice di tipo byte costituita da un'immagine in formato COFF contenente un assembly generato.

rawSymbolStore
Type: System.Byte[]

Matrice di tipo byte contenente i byte non elaborati che rappresentano i simboli per l'assembly.

securityEvidence
Type: System.Security.Policy.Evidence

Evidenza per il caricamento dell'assembly.

Valore restituito

Type: System.Reflection.Assembly

Assembly caricato.

Exception Condition
ArgumentNullException

rawAssembly è null.

BadImageFormatException

rawAssembly non è un assembly valido.

-oppure-

Versione 2.0 o versione successiva di common language runtime è attualmente caricata e rawAssembly è stato compilato con una versione successiva.

AppDomainUnloadedException

L'operazione viene tentata in un dominio dell'applicazione non caricato.

FileLoadException

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.

NotSupportedException

securityEvidence non è null. Quando i criteri CAS legacy non sono abilitato, securityEvidence deve essere null.

A partire dal .NET Framework 4, il livello di attendibilità di un assembly che viene caricato utilizzando questo metodo è lo stesso livello di attendibilità del dominio dell'applicazione.

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio applicazione corrente. Questo metodo viene fornito per praticità per i chiamanti di interoperabilità che non è possibile chiamare il metodo statico Assembly.Load metodo. Per caricare gli assembly in altri domini applicazione, utilizzare un metodo, ad esempio CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere il Load(AssemblyName) overload del metodo.

Nell'esempio seguente viene illustrato l'utilizzo del caricamento di un assembly non elaborato.

Per eseguire questo esempio di codice, è necessario fornire il nome completo dell'assembly. Per informazioni su come ottenere il nome completo dell'assembly, vedere Nomi degli assembly.

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

SecurityPermission

to provide evidence. Associated enumeration: F:System.Security.Permissions.SecurityPermissionFlag.ControlEvidence. Security action: F:System.Security.Permissions.SecurityAction.Demand.

FileIOPermission

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

WebPermission

for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: