Поделиться через


AssemblyBuilder.DefineDynamicModule Метод

Определение

Определяет динамический модуль в этой сборке.

Перегрузки

DefineDynamicModule(String)

Определяет именованный временный динамический модуль в этой сборке.

DefineDynamicModule(String, Boolean)

Определяет именованный временный динамический модуль в этой сборке и указывает, следует ли выдавать сведения о символах.

DefineDynamicModule(String, String)

Определяет сохраняемый динамический модуль с заданным именем, который будет сохранен в указанном файле. Никакие сведения о символах не создаются.

DefineDynamicModule(String, String, Boolean)

Определяет сохраняемый динамический модуль, указывая имя модуля, имя файла, в котором будет сохранен модуль, и следует ли создавать сведения о символах с помощью средства записи символов по умолчанию.

DefineDynamicModule(String)

Исходный код:
AssemblyBuilder.cs
Исходный код:
AssemblyBuilder.cs
Исходный код:
AssemblyBuilder.cs

Определяет именованный временный динамический модуль в этой сборке.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name);
member this.DefineDynamicModule : string -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String) As ModuleBuilder

Параметры

name
String

Имя динамического модуля.

Возвращаемое значение

ModuleBuilder, представляющий определенный динамический модуль.

Исключения

name начинается с пробелов.

-или-

Длина name равна нулю.

-или-

Длина name превышает заданную системой максимальную длину.

-или-

Только .NET Framework: модуль с тем же name уже определен в этой сборке.

Только .NET Core и .NET 5+ — динамический модуль уже определен в этой сборке.

Вызывающий объект не имеет требуемого разрешения.

Сборка для записи символов по умолчанию не может быть загружена.

-или-

Тип, реализующий интерфейс записи символов по умолчанию, не найден.

Примеры

В приведенном ниже примере кода показано, как создать временный динамический модуль с помощью DefineDynamicModule.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it cannot be saved.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule( "MyModule1" );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it can not be saved.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule1");
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)

' Create a transient dynamic module. Since no DLL name is specified with
' this constructor, it can not be saved. 
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule1")

Комментарии

Только .NET Core и .NET 5+ : сборки с несколькими модулями не поддерживаются. В сборке может быть определен только один динамический модуль.

Только .NET Framework: это ошибка для определения нескольких динамических модулей с одинаковым именем в сборке.

Определенный динамический модуль является временным. Динамический модуль не сохраняется, даже если родительская динамическая сборка была создана с RunAndSave.

Заметка

Чтобы отключить оптимизацию при отладке динамических модулей, примените атрибут DebuggableAttribute к динамической сборке перед вызовом DefineDynamicModule. Создайте экземпляр DebuggableAttribute с флагом DisableOptimizations и примените его с помощью метода SetCustomAttribute. Атрибут должен применяться к динамической сборке. Он не действует, если применяется к модулю.

Заметка

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1), этот член больше не требует ReflectionPermission с флагом ReflectionPermissionFlag.ReflectionEmit. (См. проблемы безопасности в отражении.) Чтобы использовать эту функцию, приложение должно использовать .NET Framework 3.5 или более поздней версии.

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

DefineDynamicModule(String, Boolean)

Определяет именованный временный динамический модуль в этой сборке и указывает, следует ли выдавать сведения о символах.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name, bool emitSymbolInfo);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name, bool emitSymbolInfo);
member this.DefineDynamicModule : string * bool -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String, emitSymbolInfo As Boolean) As ModuleBuilder

Параметры

name
String

Имя динамического модуля.

emitSymbolInfo
Boolean

true, если данные символов должны быть генерируются; в противном случае false.

Возвращаемое значение

ModuleBuilder, представляющий определенный динамический модуль.

Исключения

name начинается с пробелов.

-или-

Длина name равна нулю.

-или-

Длина name превышает заданную системой максимальную длину.

Сборка для записи символов по умолчанию не может быть загружена.

-или-

Тип, реализующий интерфейс записи символов по умолчанию, не найден.

Вызывающий объект не имеет требуемого разрешения.

Примеры

В приведенном ниже примере кода показано, как создать временный динамический модуль с помощью DefineDynamicModule, подавляя сведения о символах.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it can not be saved. By specifying the second parameter
// of the constructor as false, we can suppress the emission of symbol info.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule(
   "MyModule2", false );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);

// Create a transient dynamic module. Since no DLL name is specified with
// this constructor, it can not be saved. By specifying the second parameter
// of the constructor as false, we can suppress the emission of symbol info.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule2",
                                 false);
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)

' Create a transient dynamic module. Since no DLL name is specified with
' this constructor, it can not be saved. By specifying the second parameter
' of the constructor as false, we can suppress the emission of symbol info.
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule2", _
                                  False)

Комментарии

Ошибка определения нескольких динамических модулей с одинаковым именем в сборке.

Динамический модуль не сохраняется, даже если родительская динамическая сборка была создана с RunAndSave.

Заметка

Чтобы отключить оптимизацию при отладке динамических модулей, примените атрибут DebuggableAttribute к динамической сборке перед вызовом DefineDynamicModule. Создайте экземпляр DebuggableAttribute с флагом DisableOptimizations и примените его с помощью метода SetCustomAttribute. Атрибут должен применяться к динамической сборке. Он не действует, если применяется к модулю.

Заметка

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1), этот член больше не требует ReflectionPermission с флагом ReflectionPermissionFlag.ReflectionEmit. (См. проблемы безопасности в отражении.) Чтобы использовать эту функцию, приложение должно использовать .NET Framework 3.5 или более поздней версии.

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

DefineDynamicModule(String, String)

Определяет сохраняемый динамический модуль с заданным именем, который будет сохранен в указанном файле. Никакие сведения о символах не создаются.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name, System::String ^ fileName);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name, string fileName);
member this.DefineDynamicModule : string * string -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String, fileName As String) As ModuleBuilder

Параметры

name
String

Имя динамического модуля.

fileName
String

Имя файла, в который следует сохранить динамический модуль.

Возвращаемое значение

Объект ModuleBuilder, представляющий определенный динамический модуль.

Исключения

name или fileNamenull.

Длина name или fileName равна нулю.

-или-

Длина name превышает заданную системой максимальную длину.

-или-

fileName содержит спецификацию пути (например, компонент каталога).

-или-

Существует конфликт с именем другого файла, который принадлежит этой сборке.

Эта сборка была сохранена ранее.

Эта сборка была вызвана динамической сборкой с атрибутом Run.

Вызывающий объект не имеет требуемого разрешения.

Сборка для записи символов по умолчанию не может быть загружена.

-или-

Тип, реализующий интерфейс записи символов по умолчанию, не найден.

Примеры

В приведенном ниже примере кода показано, как создать постоянный динамический модуль с помощью DefineDynamicModule.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a dynamic module that can be saved as the specified DLL name.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule(
   "MyModule3", "MyModule3.dll" );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);
// Create a dynamic module that can be saved as the specified DLL name.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule3",
                                 "MyModule3.dll");
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)
' Create a dynamic module that can be saved as the specified DLL name.
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule3", _
                              "MyModule3.dll")

Комментарии

Чтобы определить сохраняемый динамический модуль, эту сборку необходимо создать с помощью Save или атрибута RunAndSave.

Если вы хотите, чтобы модуль содержал манифест сборки, name должно совпадать с именем сборки (т. е. свойством AssemblyName.NameAssemblyName, используемым для создания динамической сборки), и fileName должно совпадать с именем файла, указанным при сохранении сборки.

В сборке только с одним модулем этот модуль должен содержать манифест сборки.

Заметка

Чтобы отключить оптимизацию при отладке динамических модулей, примените атрибут DebuggableAttribute к динамической сборке перед вызовом DefineDynamicModule. Создайте экземпляр DebuggableAttribute с флагом DisableOptimizations и примените его с помощью метода SetCustomAttribute. Атрибут должен применяться к динамической сборке. Он не действует, если применяется к модулю.

Заметка

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1), этот член больше не требует ReflectionPermission с флагом ReflectionPermissionFlag.ReflectionEmit. (См. проблемы безопасности в отражении.) Чтобы использовать эту функцию, приложение должно использовать .NET Framework 3.5 или более поздней версии.

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

DefineDynamicModule(String, String, Boolean)

Определяет сохраняемый динамический модуль, указывая имя модуля, имя файла, в котором будет сохранен модуль, и следует ли создавать сведения о символах с помощью средства записи символов по умолчанию.

public:
 System::Reflection::Emit::ModuleBuilder ^ DefineDynamicModule(System::String ^ name, System::String ^ fileName, bool emitSymbolInfo);
public System.Reflection.Emit.ModuleBuilder DefineDynamicModule (string name, string fileName, bool emitSymbolInfo);
member this.DefineDynamicModule : string * string * bool -> System.Reflection.Emit.ModuleBuilder
Public Function DefineDynamicModule (name As String, fileName As String, emitSymbolInfo As Boolean) As ModuleBuilder

Параметры

name
String

Имя динамического модуля.

fileName
String

Имя файла, в который следует сохранить динамический модуль.

emitSymbolInfo
Boolean

Если true, символьная информация записывается с помощью средства записи символов по умолчанию.

Возвращаемое значение

Объект ModuleBuilder, представляющий определенный динамический модуль.

Исключения

name или fileNamenull.

Длина name или fileName равна нулю.

-или-

Длина name превышает заданную системой максимальную длину.

-или-

fileName содержит спецификацию пути (например, компонент каталога).

-или-

Существует конфликт с именем другого файла, который принадлежит этой сборке.

Эта сборка была сохранена ранее.

Эта сборка была вызвана динамической сборкой с атрибутом Run.

Сборка для записи символов по умолчанию не может быть загружена.

-или-

Тип, реализующий интерфейс записи символов по умолчанию, не найден.

Вызывающий объект не имеет требуемого разрешения.

Примеры

В приведенном ниже примере кода показано, как создать постоянный динамический модуль с выбросами символов с помощью DefineDynamicModule.

AppDomain^ myAppDomain = Thread::GetDomain();
AssemblyName^ myAsmName = gcnew AssemblyName;
myAsmName->Name = "MyAssembly";
AssemblyBuilder^ myAsmBuilder = myAppDomain->DefineDynamicAssembly(
   myAsmName, AssemblyBuilderAccess::Run );

// Create a dynamic module that can be saved as the specified DLL name. By
// specifying the third parameter as true, we can allow the emission of symbol info.
ModuleBuilder^ myModuleBuilder = myAsmBuilder->DefineDynamicModule(
   "MyModule4", "MyModule4.dll", true );
AppDomain myAppDomain = Thread.GetDomain();
AssemblyName myAsmName = new AssemblyName();
myAsmName.Name = "MyAssembly";
AssemblyBuilder myAsmBuilder = myAppDomain.DefineDynamicAssembly(
                     myAsmName,
                     AssemblyBuilderAccess.Run);
// Create a dynamic module that can be saved as the specified DLL name. By
// specifying the third parameter as true, we can allow the emission of symbol info.
ModuleBuilder myModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule4",
                                 "MyModule4.dll",
                                  true);
Dim myAppDomain As AppDomain = Thread.GetDomain()
Dim myAsmName As New AssemblyName()
myAsmName.Name = "MyAssembly"
Dim myAsmBuilder As AssemblyBuilder = myAppDomain.DefineDynamicAssembly(myAsmName, _
                      AssemblyBuilderAccess.Run)
' Create a dynamic module that can be saved as the specified DLL name. By
' specifying the third parameter as true, we can allow the emission of symbol info.
Dim myModuleBuilder As ModuleBuilder = myAsmBuilder.DefineDynamicModule("MyModule4", _
                              "MyModule4.dll", _
                              True)

Комментарии

Чтобы определить сохраняемый динамический модуль, эту сборку необходимо создать с помощью Save или атрибута RunAndSave.

Если вы хотите, чтобы модуль содержал манифест сборки, name должно совпадать с именем сборки (т. е. свойством AssemblyName.NameAssemblyName, используемым для создания динамической сборки), и fileName должно совпадать с именем файла, указанным при сохранении сборки.

В сборке только с одним модулем этот модуль должен содержать манифест сборки.

Заметка

Чтобы отключить оптимизацию при отладке динамических модулей, примените атрибут DebuggableAttribute к динамической сборке перед вызовом DefineDynamicModule. Создайте экземпляр DebuggableAttribute с флагом DisableOptimizations и примените его с помощью метода SetCustomAttribute. Атрибут должен применяться к динамической сборке. Он не действует, если применяется к модулю.

Заметка

Начиная с .NET Framework 2.0 с пакетом обновления 1 (SP1), этот член больше не требует ReflectionPermission с флагом ReflectionPermissionFlag.ReflectionEmit. (См. проблемы безопасности в отражении.) Чтобы использовать эту функцию, приложение должно использовать .NET Framework 3.5 или более поздней версии.

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