AppDomain.Load Metodo

Definizione

Carica Assembly nel dominio applicazione.Loads an Assembly into this application domain.

Overload

Load(Byte[])

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.

Load(AssemblyName)

Carica Assembly, dato il relativo AssemblyName.Loads an Assembly given its AssemblyName.

Load(String)

Carica Assembly, dato il nome visualizzato.Loads an Assembly given its display name.

Load(Byte[], Byte[])

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Vengono caricati anche i byte non elaborati che rappresentano i simboli per l'oggetto Assembly.The raw bytes representing the symbols for the Assembly are also loaded.

Load(AssemblyName, Evidence)

Carica Assembly, dato il relativo AssemblyName.Loads an Assembly given its AssemblyName.

Load(String, Evidence)

Carica Assembly, dato il nome visualizzato.Loads an Assembly given its display name.

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

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Vengono caricati anche i byte non elaborati che rappresentano i simboli per l'oggetto Assembly.The raw bytes representing the symbols for the Assembly are also loaded.

Load(Byte[])

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.

public:
 virtual System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly);
public System.Reflection.Assembly Load (byte[] rawAssembly);
abstract member Load : byte[] -> System.Reflection.Assembly
override this.Load : byte[] -> System.Reflection.Assembly
Public Function Load (rawAssembly As Byte()) As Assembly

Parametri

rawAssembly
Byte[]

Matrice di tipo byte costituita da un'immagine in formato COFF contenente un assembly generato.An array of type byte that is a COFF-based image containing an emitted assembly.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Eccezioni

rawAssembly è null.rawAssembly is null.

rawAssembly non è un assembly valido.rawAssembly is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro rawAssembly è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

Esempi

Nell'esempio seguente viene illustrato l'utilizzo del caricamento di un assembly non elaborato.The following sample demonstrates the use of loading a raw assembly.

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly.For this code example to run, you must provide the fully qualified assembly name. Per informazioni su come ottenere il nome completo dell'assembly, vedere nomi degli assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}


// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew 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, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);
      
      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}

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");
   }
}
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver
      
      InstantiateMyType(currentDomain)      ' OK!
   End Sub
   
   
   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   
   ' Loads the content of a file to a byte array. 
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length - 1)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()
      
      Return buffer
   End Function 'loadFile
   
   
   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)
      
      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)
      
      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)
      
      Return myAssembly
   End Function 'MyResolver
   
   
   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
      
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      assemblyBuilder.Save("temp.dll")
   End Sub

End Module 'Test

Commenti

A partire dalla .NET Framework 4.NET Framework 4, il livello di attendibilità di un assembly caricato usando questo metodo è uguale al livello di attendibilità del dominio dell'applicazione.Beginning with the .NET Framework 4.NET Framework 4, the trust level of an assembly that is loaded by using this method is the same as the trust level of the application domain.

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere l'overload del metodo Load(AssemblyName).For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicurezza

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName)

Carica Assembly, dato il relativo AssemblyName.Loads an Assembly given its AssemblyName.

public:
 virtual System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef);
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef);
abstract member Load : System.Reflection.AssemblyName -> System.Reflection.Assembly
override this.Load : System.Reflection.AssemblyName -> System.Reflection.Assembly
Public Function Load (assemblyRef As AssemblyName) As Assembly

Parametri

assemblyRef
AssemblyName

Oggetto che descrive l'assembly da caricare.An object that describes the assembly to load.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Eccezioni

assemblyRef è null.assemblyRef is null.

assemblyRef non trovata.assemblyRef is not found.

assemblyRef non è un assembly valido.assemblyRef is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro assemblyRef è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

Commenti

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Se una versione dell'assembly richiesto è già caricata, questo metodo restituisce l'assembly caricato, anche se viene richiesta una versione diversa.If a version of the requested assembly is already loaded, this method returns the loaded assembly, even if a different version is requested.

Non è consigliabile specificare un nome di assembly parziale per assemblyRef.Supplying a partial assembly name for assemblyRef is not recommended. Un nome parziale omette una o più impostazioni cultura, versione o token di chiave pubblica.(A partial name omits one or more of culture, version, or public key token. Per gli overload che accettano una stringa anziché un oggetto AssemblyName, "MyAssembly, Version = 1.0.0.0" è un esempio di nome parziale e "MyAssembly, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 18ab3442da84b47" è un esempio di nome completo. L'utilizzo di nomi parziali ha un effetto negativo sulle prestazioni.For overloads that take a string instead of an AssemblyName object, "MyAssembly, Version=1.0.0.0" is an example of a partial name and "MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=18ab3442da84b47" is an example of a full name.) Using partial names has a negative effect on performance. Inoltre, un nome di assembly parziale può caricare un assembly dalla Global Assembly Cache solo se è presente una copia esatta dell'assembly nella directory di base dell'applicazione (BaseDirectory o AppDomainSetup.ApplicationBase).In addition, a partial assembly name can load an assembly from the global assembly cache only if there is an exact copy of the assembly in the application base directory (BaseDirectory or AppDomainSetup.ApplicationBase).

Se l'oggetto AppDomain corrente rappresenta Adel dominio dell'applicazione e il metodo Load viene chiamato dal Bdel dominio dell'applicazione, l'assembly viene caricato in entrambi i domini applicazione.If the current AppDomain object represents application domain A, and the Load method is called from application domain B, the assembly is loaded into both application domains. Il codice seguente, ad esempio, carica MyAssembly nel nuovo dominio applicazione ChildDomain e anche nel dominio applicazione in cui viene eseguito il codice:For example, the following code loads MyAssembly into the new application domain ChildDomain and also into the application domain where the code executes:

AppDomain^ ad = AppDomain::CreateDomain("ChildDomain");
ad->Load("MyAssembly");
AppDomain ad = AppDomain.CreateDomain("ChildDomain");
ad.Load("MyAssembly");
Dim ad As AppDomain  = AppDomain.CreateDomain("ChildDomain")
ad.Load("MyAssembly")

L'assembly viene caricato in entrambi i domini perché Assembly non deriva da MarshalByRefObjecte pertanto non è possibile effettuare il marshalling del valore restituito del metodo Load.The assembly is loaded into both domains because Assembly does not derive from MarshalByRefObject, and therefore the return value of the Load method cannot be marshaled. Il Common Language Runtime tenta invece di caricare l'assembly nel dominio dell'applicazione chiamante.Instead, the common language runtime tries to load the assembly into the calling application domain. Gli assembly caricati nei due domini applicazione potrebbero essere diversi se le impostazioni del percorso per i due domini applicazione sono diverse.The assemblies that are loaded into the two application domains might be different if the path settings for the two application domains are different.

Nota

Se entrambe le proprietà AssemblyName.Name e AssemblyName.CodeBase sono impostate, il primo tentativo di caricamento dell'assembly utilizzerà il nome visualizzato (incluse la versione, le impostazioni cultura e così via, come restituito dalla proprietà Assembly.FullName).If both the AssemblyName.Name property and the AssemblyName.CodeBase property are set, the first attempt to load the assembly uses the display name (including version, culture, and so on, as returned by the Assembly.FullName property). Se il file non viene trovato, viene utilizzata la proprietà CodeBase per cercare l'assembly.If the file is not found, the CodeBase property is used to search for the assembly. Se l'assembly viene trovato utilizzando CodeBase, il nome visualizzato viene associato all'assembly.If the assembly is found using CodeBase, the display name is matched against the assembly. Se la corrispondenza ha esito negativo, viene generata un'FileLoadException.If the match fails, a FileLoadException is thrown.

Sicurezza

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(String)

Carica Assembly, dato il nome visualizzato.Loads an Assembly given its display name.

public:
 virtual System::Reflection::Assembly ^ Load(System::String ^ assemblyString);
public System.Reflection.Assembly Load (string assemblyString);
abstract member Load : string -> System.Reflection.Assembly
override this.Load : string -> System.Reflection.Assembly
Public Function Load (assemblyString As String) As Assembly

Parametri

assemblyString
String

Nome visualizzato dell'assembly.The display name of the assembly. Vedere FullName.See FullName.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Eccezioni

assemblyString è nullassemblyString is null

assemblyString non viene trovato.assemblyString is not found.

assemblyString non è un assembly valido.assemblyString is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro assemblyString è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

Commenti

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere l'overload del metodo Load(AssemblyName).For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicurezza

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
per la possibilità di accedere al percorso dell'assembly se l'assembly non è locale.for the ability to access the location of the assembly if the assembly is not local.

Load(Byte[], Byte[])

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Vengono caricati anche i byte non elaborati che rappresentano i simboli per l'oggetto Assembly.The raw bytes representing the symbols for the Assembly are also loaded.

public:
 virtual System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly, cli::array <System::Byte> ^ rawSymbolStore);
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore);
abstract member Load : byte[] * byte[] -> System.Reflection.Assembly
override this.Load : byte[] * byte[] -> System.Reflection.Assembly
Public Function Load (rawAssembly As Byte(), rawSymbolStore As Byte()) As Assembly

Parametri

rawAssembly
Byte[]

Matrice di tipo byte costituita da un'immagine in formato COFF contenente un assembly generato.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

Matrice di tipo byte contenente i byte non elaborati che rappresentano i simboli per l'assembly.An array of type byte containing the raw bytes representing the symbols for the assembly.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Eccezioni

rawAssembly è null.rawAssembly is null.

rawAssembly non è un assembly valido.rawAssembly is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro rawAssembly è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

Esempi

Nell'esempio seguente viene illustrato l'utilizzo del caricamento di un assembly non elaborato.The following sample demonstrates the use of loading a raw assembly.

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly.For this code example to run, you must provide the fully qualified assembly name. Per informazioni su come ottenere il nome completo dell'assembly, vedere nomi degli assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}


// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew 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, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);
      
      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}

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");
   }
}
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver
      
      InstantiateMyType(currentDomain)      ' OK!
   End Sub
   
   
   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   
   ' Loads the content of a file to a byte array. 
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length - 1)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()
      
      Return buffer
   End Function 'loadFile
   
   
   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)
      
      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)
      
      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)
      
      Return myAssembly
   End Function 'MyResolver
   
   
   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
      
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      assemblyBuilder.Save("temp.dll")
   End Sub

End Module 'Test

Commenti

A partire dalla .NET Framework 4.NET Framework 4, il livello di attendibilità di un assembly caricato usando questo metodo è uguale al livello di attendibilità del dominio dell'applicazione.Beginning with the .NET Framework 4.NET Framework 4, the trust level of an assembly that is loaded by using this method is the same as the trust level of the application domain.

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere l'overload del metodo Load(AssemblyName).For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicurezza

WebPermission
per la lettura di un URI che non inizia con "file://".for reading a URI that does not begin with "file://".

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName, Evidence)

Avviso

Questa API è ora obsoleta.

Carica Assembly, dato il relativo AssemblyName.Loads an Assembly given its AssemblyName.

public:
 System::Reflection::Assembly ^ Load(System::Reflection::AssemblyName ^ assemblyRef, System::Security::Policy::Evidence ^ assemblySecurity);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[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 https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (System.Reflection.AssemblyName assemblyRef, System.Security.Policy.Evidence assemblySecurity);
member this.Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (assemblyRef As AssemblyName, assemblySecurity As Evidence) As Assembly

Parametri

assemblyRef
AssemblyName

Oggetto che descrive l'assembly da caricare.An object that describes the assembly to load.

assemblySecurity
Evidence

Evidenza per il caricamento dell'assembly.Evidence for loading the assembly.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Attributi

Eccezioni

assemblyRef è nullassemblyRef is null

assemblyRef non viene trovato.assemblyRef is not found.

assemblyRef non è un assembly valido.assemblyRef is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro assemblyRef è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

Commenti

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere l'overload del metodo Load(AssemblyName).For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicurezza

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

SecurityPermission
per caricare un assembly con evidenze.to load an assembly with evidence. Enumerazione associata: ControlEvidence.Associated enumeration: ControlEvidence.

WebPermission
per la lettura di un percorso che non ha il formato "file://" o "\\UNC\dir\" o "c:\".for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

Load(String, Evidence)

Avviso

Questa API è ora obsoleta.

Carica Assembly, dato il nome visualizzato.Loads an Assembly given its display name.

public:
 System::Reflection::Assembly ^ Load(System::String ^ assemblyString, System::Security::Policy::Evidence ^ assemblySecurity);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[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 https://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Reflection.Assembly Load (string assemblyString, System.Security.Policy.Evidence assemblySecurity);
member this.Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (assemblyString As String, assemblySecurity As Evidence) As Assembly

Parametri

assemblyString
String

Nome visualizzato dell'assembly.The display name of the assembly. Vedere FullName.See FullName.

assemblySecurity
Evidence

Evidenza per il caricamento dell'assembly.Evidence for loading the assembly.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Attributi

Eccezioni

assemblyString è nullassemblyString is null

assemblyString non viene trovato.assemblyString is not found.

assemblyString non è un assembly valido.assemblyString is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro assemblyString è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

Commenti

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere l'overload del metodo Load(AssemblyName).For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicurezza

SecurityPermission
per caricare un assembly con evidenze.to load an assembly with evidence. Enumerazione associata: ControlEvidence.Associated enumeration: ControlEvidence.

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
per la lettura di un percorso che non ha il formato "file://" o "\\UNC\dir\" o "c:\".for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

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

Avviso

Questa API è ora obsoleta.

Carica l'oggetto Assembly con un'immagine in formato COFF (Common Object File Format) contenente un oggetto Assembly generato.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Vengono caricati anche i byte non elaborati che rappresentano i simboli per l'oggetto Assembly.The raw bytes representing the symbols for the Assembly are also loaded.

public:
 System::Reflection::Assembly ^ Load(cli::array <System::Byte> ^ rawAssembly, cli::array <System::Byte> ^ rawSymbolStore, System::Security::Policy::Evidence ^ securityEvidence);
[System.Obsolete("Use an overload that does not take an Evidence parameter")]
[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 https://go.microsoft.com/fwlink/?LinkId=155570 for more information.")]
public System.Reflection.Assembly Load (byte[] rawAssembly, byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence);
member this.Load : byte[] * byte[] * System.Security.Policy.Evidence -> System.Reflection.Assembly
Public Function Load (rawAssembly As Byte(), rawSymbolStore As Byte(), securityEvidence As Evidence) As Assembly

Parametri

rawAssembly
Byte[]

Matrice di tipo byte costituita da un'immagine in formato COFF contenente un assembly generato.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

Matrice di tipo byte contenente i byte non elaborati che rappresentano i simboli per l'assembly.An array of type byte containing the raw bytes representing the symbols for the assembly.

securityEvidence
Evidence

Evidenza per il caricamento dell'assembly.Evidence for loading the assembly.

Restituisce

Assembly caricato.The loaded assembly.

Implementazioni

Attributi

Eccezioni

rawAssembly è null.rawAssembly is null.

rawAssembly non è un assembly valido.rawAssembly is not a valid assembly.

-oppure--or- Attualmente è caricata la versione 2.0 o successiva di Common Language Runtime e il parametro rawAssembly è stato compilato con una versione successiva.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

L'operazione viene tentata in un dominio dell'applicazione non caricato.The operation is attempted on an unloaded application domain.

Un assembly o un modulo è stato caricato due volte con due evidenze diverse.An assembly or module was loaded twice with two different evidences.

securityEvidence non è null.securityEvidence is not null. Quando i criteri di sicurezza dall'accesso di codice legacy non sono abilitati, securityEvidence deve essere null.When legacy CAS policy is not enabled, securityEvidence should be null.

Esempi

Nell'esempio seguente viene illustrato l'utilizzo del caricamento di un assembly non elaborato.The following sample demonstrates the use of loading a raw assembly.

Per eseguire questo esempio di codice, è necessario specificare il nome completo dell'assembly.For this code example to run, you must provide the fully qualified assembly name. Per informazioni su come ottenere il nome completo dell'assembly, vedere nomi degli assembly.For information about how to obtain the fully qualified assembly name, see Assembly Names.

using namespace System;
using namespace System::IO;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
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.
array<Byte>^ loadFile( String^ filename )
{
   FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
   array<Byte>^buffer = gcnew array<Byte>((int)fs->Length);
   fs->Read( buffer, 0, buffer->Length );
   fs->Close();
   return buffer;
}


// Creates a dynamic assembly with symbol information
// and saves them to temp.dll and temp.pdb
void EmitAssembly( AppDomain^ domain )
{
   AssemblyName^ assemblyName = gcnew 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, nullptr );
   ILGenerator^ ilGenerator = constructorBuilder->GetILGenerator();
   ilGenerator->EmitWriteLine( "MyType instantiated!" );
   ilGenerator->Emit( OpCodes::Ret );
   typeBuilder->CreateType();
   assemblyBuilder->Save( "temp.dll" );
}

ref class Resolver
{
public:
   static Assembly^ MyResolver( Object^ sender, ResolveEventArgs^ args )
   {
      AppDomain^ domain = dynamic_cast<AppDomain^>(sender);
      
      // Once the files are generated, this call is
      // actually no longer necessary.
      EmitAssembly( domain );
      array<Byte>^rawAssembly = loadFile( "temp.dll" );
      array<Byte>^rawSymbolStore = loadFile( "temp.pdb" );
      Assembly^ assembly = domain->Load( rawAssembly, rawSymbolStore );
      return assembly;
   }

};

int main()
{
   AppDomain^ currentDomain = AppDomain::CurrentDomain;
   InstantiateMyType( currentDomain ); // Failed!
   currentDomain->AssemblyResolve += gcnew ResolveEventHandler( Resolver::MyResolver );
   InstantiateMyType( currentDomain ); // OK!
}

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");
   }
}
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Emit

Module Test
   
   Sub Main()
      Dim currentDomain As AppDomain = AppDomain.CurrentDomain
      
      InstantiateMyType(currentDomain)      ' Failed!

      AddHandler currentDomain.AssemblyResolve, AddressOf MyResolver
      
      InstantiateMyType(currentDomain)      ' OK!
   End Sub
   
   
   Sub InstantiateMyType(domain As AppDomain)
      Try
     ' You must supply a valid fully qualified assembly name here.
         domain.CreateInstance("Assembly text name, Version, Culture, PublicKeyToken", "MyType")
      Catch e As Exception
         Console.WriteLine(e.Message)
      End Try
   End Sub
   
   
   ' Loads the content of a file to a byte array. 
   Function loadFile(filename As String) As Byte()
      Dim fs As New FileStream(filename, FileMode.Open)
      Dim buffer(CInt(fs.Length - 1)) As Byte
      fs.Read(buffer, 0, buffer.Length)
      fs.Close()
      
      Return buffer
   End Function 'loadFile
   
   
   Function MyResolver(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
      Dim domain As AppDomain = DirectCast(sender, AppDomain)
      
      ' Once the files are generated, this call is
      ' actually no longer necessary.
      EmitAssembly(domain)
      
      Dim rawAssembly As Byte() = loadFile("temp.dll")
      Dim rawSymbolStore As Byte() = loadFile("temp.pdb")
      Dim myAssembly As System.Reflection.Assembly = domain.Load(rawAssembly, rawSymbolStore)
      
      Return myAssembly
   End Function 'MyResolver
   
   
   ' Creates a dynamic assembly with symbol information
   ' and saves them to temp.dll and temp.pdb
   Sub EmitAssembly(domain As AppDomain)
      Dim assemblyName As New AssemblyName()
      assemblyName.Name = "MyAssembly"
      
      Dim assemblyBuilder As AssemblyBuilder = domain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save)
      Dim moduleBuilder As ModuleBuilder = assemblyBuilder.DefineDynamicModule("MyModule", "temp.dll", True)
      Dim typeBuilder As TypeBuilder = moduleBuilder.DefineType("MyType", TypeAttributes.Public)
      
      Dim constructorBuilder As ConstructorBuilder = typeBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Nothing)
      Dim ilGenerator As ILGenerator = constructorBuilder.GetILGenerator()
      ilGenerator.EmitWriteLine("MyType instantiated!")
      ilGenerator.Emit(OpCodes.Ret)
      
      typeBuilder.CreateType()
      
      assemblyBuilder.Save("temp.dll")
   End Sub

End Module 'Test

Commenti

A partire dalla .NET Framework 4.NET Framework 4, il livello di attendibilità di un assembly caricato usando questo metodo è uguale al livello di attendibilità del dominio dell'applicazione.Beginning with the .NET Framework 4.NET Framework 4, the trust level of an assembly that is loaded by using this method is the same as the trust level of the application domain.

Questo metodo deve essere utilizzato solo per caricare un assembly nel dominio dell'applicazione corrente.This method should be used only to load an assembly into the current application domain. Questo metodo viene fornito per praticità ai chiamanti di interoperabilità che non possono chiamare il metodo statico Assembly.Load.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Per caricare gli assembly in altri domini applicazione, usare un metodo come CreateInstanceAndUnwrap.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Per informazioni comuni a tutti gli overload di questo metodo, vedere l'overload del metodo Load(AssemblyName).For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Sicurezza

SecurityPermission
per fornire evidenze.to provide evidence. Enumerazione associata: ControlEvidence.Associated enumeration: ControlEvidence. Azione di sicurezza: Demand.Security action: Demand.

FileIOPermission
per accedere a leggere da un file o da una directory e per accedere alle informazioni nel percorso stesso.for access to read from a file or directory, and for access to the information in the path itself. Enumerazioni associate: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
per la lettura di un percorso che non ha il formato "file://" o "\\UNC\dir\" o "c:\".for reading a path that is not in the form "file://" or "\\UNC\dir\" or "c:\".

Si applica a