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
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, язык и региональные параметры = neutral, 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.Name свойство и AssemblyName.CodeBase имеет значение, первая попытка загрузить сборку использует отображаемое имя (включая версии, языка и региональных параметров и т. д., возвращенная 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). Если файл не найден, 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
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:
 virtual 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);
abstract member Load : System.Reflection.AssemblyName * System.Security.Policy.Evidence -> System.Reflection.Assembly
override 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://» или "\\\UNC\dir\\" или «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:
 virtual 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);
abstract member Load : string * System.Security.Policy.Evidence -> System.Reflection.Assembly
override 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://» или "\\\UNC\dir\\" или «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:
 virtual 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);
abstract member Load : byte[] * byte[] * System.Security.Policy.Evidence -> System.Reflection.Assembly
override 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
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://» или "\\\UNC\dir\\" или «c:\\«.for reading a path that is not in the form "file://" or "\\\UNC\dir\\" or "c:\\".

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