AppDomain.Load AppDomain.Load AppDomain.Load AppDomain.Load Method

Определение

Загружает сборку Assembly в этот домен приложения.Loads an Assembly into this application domain.

Перегрузки

Load(Byte[]) Load(Byte[]) Load(Byte[]) Load(Byte[])

Загружает объект Assembly с образом в формате COFF, содержащим созданный объект Assembly.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly.

Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

Загружает сборку Assembly, заданную ее именем AssemblyName.Loads an Assembly given its AssemblyName.

Load(String) Load(String) Load(String) Load(String)

Загружает сборку Assembly, заданную ее отображаемым именем.Loads an Assembly given its display name.

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

Загружает объект Assembly с образом в формате COFF, содержащим порожденный объект Assembly.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Загружаются также необработанные байты, представляющие символы для Assembly.The raw bytes representing the symbols for the Assembly are also loaded.

Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence)

Загружает сборку Assembly, заданную ее именем AssemblyName.Loads an Assembly given its AssemblyName.

Load(String, Evidence) Load(String, Evidence) Load(String, Evidence) Load(String, Evidence)

Загружает сборку Assembly, заданную ее отображаемым именем.Loads an Assembly given its display name.

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

Загружает объект Assembly с образом в формате COFF, содержащим порожденный объект Assembly.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Загружаются также необработанные байты, представляющие символы для Assembly.The raw bytes representing the symbols for the Assembly are also loaded.

Load(Byte[]) Load(Byte[]) Load(Byte[]) Load(Byte[])

Загружает объект Assembly с образом в формате COFF, содержащим созданный объект Assembly.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

Параметры

rawAssembly
Byte[]

Массив типа byte, который является образом в формате COFF, содержащим порожденную сборку.An array of type byte that is a COFF-based image containing an emitted assembly.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

Свойство rawAssembly имеет значение null.rawAssembly is null.

rawAssembly не является допустимой сборкой.rawAssembly is not a valid assembly.

- или --or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка rawAssembly скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

Примеры

В следующем примере демонстрируется использование загрузки необработанной сборки.The following sample demonstrates the use of loading a raw assembly.

Для выполнения этого примера кода необходимо указать полное имя сборки.For this code example to run, you must provide the fully qualified assembly name. Дополнительные сведения о получении полного имени сборки см. в разделе имена сборок.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 'Main
   
   
   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 'InstantiateMyType
   
   
   ' 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)) 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 'EmitAssembly

End Module 'Test

Комментарии

Начиная с .NET Framework 4.NET Framework 4, уровень доверия сборки, загружаемой с помощью этого метода, совпадает с уровнем доверия домена приложения.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.

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Сведения, общие для всех перегрузок этого метода, см. в Load(AssemblyName) разделе перегрузка метода.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Безопасность

FileIOPermission
для доступа к чтению из файла или каталога, а также для доступа к данным в самом пути.for access to read from a file or directory, and for access to the information in the path itself. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

Загружает сборку Assembly, заданную ее именем 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

Параметры

assemblyRef
AssemblyName AssemblyName AssemblyName AssemblyName

Объект, который описывает сборку, подлежащую загрузке.An object that describes the assembly to load.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

Свойство assemblyRef имеет значение null.assemblyRef is null.

assemblyRef не найден.assemblyRef is not found.

assemblyRef не является допустимой сборкой.assemblyRef is not a valid assembly.

-или--or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка assemblyRef скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

Комментарии

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Если версия запрошенной сборки уже загружена, этот метод возвращает загруженную сборку, даже если запрошена другая версия.If a version of the requested assembly is already loaded, this method returns the loaded assembly, even if a different version is requested.

Не рекомендуется указывать частичное имя сборки assemblyRef для.Supplying a partial assembly name for assemblyRef is not recommended. (Частичное имя пропускает один или несколько языков и региональных параметров, версии или маркера открытого ключа.(A partial name omits one or more of culture, version, or public key token. Для перегрузок, принимающих строку вместо AssemblyName объекта, "MyAssembly, Version = 1.0.0.0" — это пример частичного имени, а "MyAssembly, Version = 1.0.0.0, культура = нейтральный, PublicKeyToken = 18ab3442da84b47" — пример полного имени.) Использование частичных имен отрицательно сказывается на производительности.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. Кроме того, частичное имя сборки может загружать сборку из глобального кэша сборок только в том случае, если имеется точная копия сборки в базовом каталоге приложения (BaseDirectory или 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).

Если текущий AppDomain объект представляет домен Aприложения, а Load метод вызывается из домена Bприложения, сборка загружается в оба домена приложений.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. Например, следующий код загружается MyAssembly в новый домен ChildDomain приложения, а также в домен приложения, в котором выполняется код: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")

Сборка загружается в оба домена, Assembly поскольку не является производной MarshalByRefObjectот, и поэтому возвращаемое значение 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. Вместо этого среда CLR пытается загрузить сборку в вызывающий домен приложения.Instead, the common language runtime tries to load the assembly into the calling application domain. Сборки, загруженные в два домена приложений, могут отличаться, если параметры пути для двух доменов приложений различаются.The assemblies that are loaded into the two application domains might be different if the path settings for the two application domains are different.

Примечание

Если заданы AssemblyName.CodeBase и Assembly.FullName свойство, и свойство, при первой попытке загрузки сборки используется отображаемое имя (включая версию, культуру и т. д., которое возвращается свойством). AssemblyName.NameIf 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). Если файл не найден, CodeBase свойство используется для поиска сборки.If the file is not found, the CodeBase property is used to search for the assembly. Если сборка найдена с помощью CodeBase, отображаемое имя сопоставляется с сборкой.If the assembly is found using CodeBase, the display name is matched against the assembly. Если совпадение не удается, FileLoadException создается исключение.If the match fails, a FileLoadException is thrown.

Безопасность

FileIOPermission
для доступа к чтению из файла или каталога, а также для доступа к данным в самом пути.for access to read from a file or directory, and for access to the information in the path itself. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(String) Load(String) Load(String) Load(String)

Загружает сборку Assembly, заданную ее отображаемым именем.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

Параметры

assemblyString
String String String String

Отображаемое имя сборки.The display name of the assembly. См. раздел FullName.See FullName.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

assemblyString равно nullassemblyString is null

assemblyString не найден.assemblyString is not found.

assemblyString не является допустимой сборкой.assemblyString is not a valid assembly.

- или --or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка assemblyString скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

Комментарии

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Сведения, общие для всех перегрузок этого метода, см. в Load(AssemblyName) разделе перегрузка метода.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Безопасность

FileIOPermission
для доступа к чтению из файла или каталога, а также для доступа к данным в самом пути.for access to read from a file or directory, and for access to the information in the path itself. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
значение для возможности доступа к расположению сборки, если сборка не является локальной.for the ability to access the location of the assembly if the assembly is not local.

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

Загружает объект Assembly с образом в формате COFF, содержащим порожденный объект Assembly.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Загружаются также необработанные байты, представляющие символы для 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

Параметры

rawAssembly
Byte[]

Массив типа byte, который является образом в формате COFF, содержащим порожденную сборку.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

Массив типа byte, содержащий необработанные байты, которые представляют символы для сборки.An array of type byte containing the raw bytes representing the symbols for the assembly.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

Свойство rawAssembly имеет значение null.rawAssembly is null.

rawAssembly не является допустимой сборкой.rawAssembly is not a valid assembly.

- или --or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка rawAssembly скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

Примеры

В следующем примере демонстрируется использование загрузки необработанной сборки.The following sample demonstrates the use of loading a raw assembly.

Для выполнения этого примера кода необходимо указать полное имя сборки.For this code example to run, you must provide the fully qualified assembly name. Дополнительные сведения о получении полного имени сборки см. в разделе имена сборок.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 'Main
   
   
   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 'InstantiateMyType
   
   
   ' 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)) 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 'EmitAssembly

End Module 'Test

Комментарии

Начиная с .NET Framework 4.NET Framework 4, уровень доверия сборки, загружаемой с помощью этого метода, совпадает с уровнем доверия домена приложения.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.

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Сведения, общие для всех перегрузок этого метода, см. в Load(AssemblyName) разделе перегрузка метода.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Безопасность

WebPermission
для чтения URI, который не начинается с "file://".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. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence) Load(AssemblyName, Evidence)

Предупреждение

Этот API устарел.

Загружает сборку Assembly, заданную ее именем 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 http://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

Параметры

assemblyRef
AssemblyName AssemblyName AssemblyName AssemblyName

Объект, который описывает сборку, подлежащую загрузке.An object that describes the assembly to load.

assemblySecurity
Evidence Evidence Evidence Evidence

Свидетельство для загрузки сборки.Evidence for loading the assembly.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

assemblyRef не найден.assemblyRef is not found.

assemblyRef не является допустимой сборкой.assemblyRef is not a valid assembly.

-или--or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка assemblyRef скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and assemblyRef was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

Комментарии

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Сведения, общие для всех перегрузок этого метода, см. в Load(AssemblyName) разделе перегрузка метода.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Безопасность

FileIOPermission
для доступа к чтению из файла или каталога, а также для доступа к данным в самом пути.for access to read from a file or directory, and for access to the information in the path itself. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

SecurityPermission
для загрузки сборки с свидетельством.to load an assembly with evidence. Связанное перечисление: ControlEvidence.Associated enumeration: ControlEvidence.

WebPermission
для чтения пути, который не имеет вид "file://", "\\\унк\дир\\" или "c:\\".for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

Load(String, Evidence) Load(String, Evidence) Load(String, Evidence) Load(String, Evidence)

Предупреждение

Этот API устарел.

Загружает сборку Assembly, заданную ее отображаемым именем.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 http://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

Параметры

assemblyString
String String String String

Отображаемое имя сборки.The display name of the assembly. См. раздел FullName.See FullName.

assemblySecurity
Evidence Evidence Evidence Evidence

Свидетельство для загрузки сборки.Evidence for loading the assembly.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

assemblyString равно nullassemblyString is null

assemblyString не найден.assemblyString is not found.

assemblyString не является допустимой сборкой.assemblyString is not a valid assembly.

- или --or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка assemblyString скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and assemblyString was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

Комментарии

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Сведения, общие для всех перегрузок этого метода, см. в Load(AssemblyName) разделе перегрузка метода.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Безопасность

SecurityPermission
для загрузки сборки с свидетельством.to load an assembly with evidence. Связанное перечисление: ControlEvidence.Associated enumeration: ControlEvidence.

FileIOPermission
для доступа к чтению из файла или каталога, а также для доступа к данным в самом пути.for access to read from a file or directory, and for access to the information in the path itself. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
для чтения пути, который не имеет вид "file://", "\\\унк\дир\\" или "c:\\".for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

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

Предупреждение

Этот API устарел.

Загружает объект Assembly с образом в формате COFF, содержащим порожденный объект Assembly.Loads the Assembly with a common object file format (COFF) based image containing an emitted Assembly. Загружаются также необработанные байты, представляющие символы для 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 http://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

Параметры

rawAssembly
Byte[]

Массив типа byte, который является образом в формате COFF, содержащим порожденную сборку.An array of type byte that is a COFF-based image containing an emitted assembly.

rawSymbolStore
Byte[]

Массив типа byte, содержащий необработанные байты, которые представляют символы для сборки.An array of type byte containing the raw bytes representing the symbols for the assembly.

securityEvidence
Evidence Evidence Evidence Evidence

Свидетельство для загрузки сборки.Evidence for loading the assembly.

Возвраты

Загруженная сборка.The loaded assembly.

Реализации

Исключения

Свойство rawAssembly имеет значение null.rawAssembly is null.

rawAssembly не является допустимой сборкой.rawAssembly is not a valid assembly.

- или --or- Сейчас загружена среда CLR 2.0 или более поздней версии. Сборка rawAssembly скомпилирована в более поздней версии.Version 2.0 or later of the common language runtime is currently loaded and rawAssembly was compiled with a later version.

Предпринята попытка выполнения операции с выгруженным доменом приложения.The operation is attempted on an unloaded application domain.

Сборка или модуль был загружен дважды с двумя разными свидетельствами.An assembly or module was loaded twice with two different evidences.

securityEvidence не является null.securityEvidence is not null. Если не включена политика разграничения доступа кода для кода предыдущей версии, securityEvidence должно иметь значение null.When legacy CAS policy is not enabled, securityEvidence should be null.

Примеры

В следующем примере демонстрируется использование загрузки необработанной сборки.The following sample demonstrates the use of loading a raw assembly.

Для выполнения этого примера кода необходимо указать полное имя сборки.For this code example to run, you must provide the fully qualified assembly name. Дополнительные сведения о получении полного имени сборки см. в разделе имена сборок.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 'Main
   
   
   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 'InstantiateMyType
   
   
   ' 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)) 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 'EmitAssembly

End Module 'Test

Комментарии

Начиная с .NET Framework 4.NET Framework 4, уровень доверия сборки, загружаемой с помощью этого метода, совпадает с уровнем доверия домена приложения.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.

Этот метод следует использовать только для загрузки сборки в текущий домен приложения.This method should be used only to load an assembly into the current application domain. Этот метод предоставляется для удобства взаимодействия вызывающих методов, которые не могут вызывать статический Assembly.Load метод.This method is provided as a convenience for interoperability callers who cannot call the static Assembly.Load method. Чтобы загрузить сборки в другие домены приложений, используйте такой метод, CreateInstanceAndUnwrapкак.To load assemblies into other application domains, use a method such as CreateInstanceAndUnwrap.

Сведения, общие для всех перегрузок этого метода, см. в Load(AssemblyName) разделе перегрузка метода.For information that is common to all overloads of this method, see the Load(AssemblyName) method overload.

Безопасность

SecurityPermission
для предоставления свидетельства.to provide evidence. Связанное перечисление: ControlEvidence.Associated enumeration: ControlEvidence. Действие по обеспечению безопасности: Demand.Security action: Demand.

FileIOPermission
для доступа к чтению из файла или каталога, а также для доступа к данным в самом пути.for access to read from a file or directory, and for access to the information in the path itself. Связанные перечисления: Read, PathDiscovery.Associated enumerations: Read, PathDiscovery.

WebPermission
для чтения пути, который не имеет вид "file://", "\\\унк\дир\\" или "c:\\".for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

Применяется к