AssemblyBuilder.DefineDynamicModule Метод

Определение

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

Перегрузки

Имя Описание
DefineDynamicModule(String)

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

DefineDynamicModule(String, Boolean)

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

DefineDynamicModule(String, String)

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

DefineDynamicModule(String, String, Boolean)

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

DefineDynamicModule(String)

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

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 уже определен в этой сборке.

name равно null.

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

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

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

–или–

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

Примеры

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

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родительская динамическая сборка.

Note

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

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

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 превышает заданную системой максимальную длину.

name равно null.

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

–или–

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

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

Примеры

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

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родительская динамическая сборка.

Note

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

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

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 или fileName есть null.

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

–или–

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

–или–

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

–или–

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

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

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

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

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

–или–

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

Примеры

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

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.Name . е. свойством используемой AssemblyName для создания динамической сборки) и fileName должно совпадать с именем файла, указанным при сохранении сборки.

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

Note

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

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

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 или fileName есть null.

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

–или–

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

–или–

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

–или–

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

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

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

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

–или–

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

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

Примеры

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

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.Name . е. свойством используемой AssemblyName для создания динамической сборки) и fileName должно совпадать с именем файла, указанным при сохранении сборки.

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

Note

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

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