다음을 통해 공유


AssemblyBuilder.DefineDynamicModule 메서드

정의

이 어셈블리에서 동적 모듈을 정의합니다.

오버로드

DefineDynamicModule(String)

이 어셈블리에서 명명된 임시 동적 모듈을 정의합니다.

DefineDynamicModule(String, Boolean)

이 어셈블리에서 명명된 임시 동적 모듈을 정의하고 기호 정보를 내보내야 하는지 여부를 지정합니다.

DefineDynamicModule(String, String)

지정된 파일에 저장될 지정된 이름을 사용하여 지속 가능한 동적 모듈을 정의합니다. 기호 정보가 내보내지지 않습니다.

DefineDynamicModule(String, String, Boolean)

모듈 이름, 모듈을 저장할 파일의 이름 및 기본 기호 작성기를 사용하여 기호 정보를 내보내야 하는지 여부를 지정하여 지속 가능한 동적 모듈을 정의합니다.

DefineDynamicModule(String)

Source:
AssemblyBuilder.cs
Source:
AssemblyBuilder.cs
Source:
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 길이는 0입니다.

-또는-

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사용하여 만든 경우에도 동적 모듈은 저장되지 않습니다.

메모

동적 모듈을 디버깅할 때 최적화를 억제하려면 DefineDynamicModule호출하기 전에 DebuggableAttribute 특성을 동적 어셈블리에 적용합니다. DisableOptimizations 플래그를 사용하여 DebuggableAttribute 인스턴스를 만들고 SetCustomAttribute 메서드를 사용하여 적용합니다. 특성을 동적 어셈블리에 적용해야 합니다. 모듈에 적용해도 아무런 효과가 없습니다.

메모

.NET Framework 2.0 서비스 팩 1부터 이 멤버는 더 이상 ReflectionPermissionFlag.ReflectionEmit 플래그를 사용하여 ReflectionPermission 필요가 없습니다. (리플렉션 내보내기보안 문제를 참조하세요.) 이 기능을 사용하려면 애플리케이션이 .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 길이는 0입니다.

-또는-

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사용하여 만든 경우에도 동적 모듈은 저장되지 않습니다.

메모

동적 모듈을 디버깅할 때 최적화를 억제하려면 DefineDynamicModule호출하기 전에 DebuggableAttribute 특성을 동적 어셈블리에 적용합니다. DisableOptimizations 플래그를 사용하여 DebuggableAttribute 인스턴스를 만들고 SetCustomAttribute 메서드를 사용하여 적용합니다. 특성을 동적 어셈블리에 적용해야 합니다. 모듈에 적용해도 아무런 효과가 없습니다.

메모

.NET Framework 2.0 서비스 팩 1부터 이 멤버는 더 이상 ReflectionPermissionFlag.ReflectionEmit 플래그를 사용하여 ReflectionPermission 필요가 없습니다. (리플렉션 내보내기보안 문제를 참조하세요.) 이 기능을 사용하려면 애플리케이션이 .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 길이는 0입니다.

-또는-

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 어셈블리의 이름(즉, 동적 어셈블리를 만드는 데 사용되는 AssemblyNameAssemblyName.Name 속성)과 동일해야 하며, fileName 어셈블리를 저장할 때 지정한 파일 이름과 동일해야 합니다.

모듈이 하나만 있는 어셈블리에서 해당 모듈은 어셈블리 매니페스트를 포함해야 합니다.

메모

동적 모듈을 디버깅할 때 최적화를 억제하려면 DefineDynamicModule호출하기 전에 DebuggableAttribute 특성을 동적 어셈블리에 적용합니다. DisableOptimizations 플래그를 사용하여 DebuggableAttribute 인스턴스를 만들고 SetCustomAttribute 메서드를 사용하여 적용합니다. 특성을 동적 어셈블리에 적용해야 합니다. 모듈에 적용해도 아무런 효과가 없습니다.

메모

.NET Framework 2.0 서비스 팩 1부터 이 멤버는 더 이상 ReflectionPermissionFlag.ReflectionEmit 플래그를 사용하여 ReflectionPermission 필요가 없습니다. (리플렉션 내보내기보안 문제를 참조하세요.) 이 기능을 사용하려면 애플리케이션이 .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 길이는 0입니다.

-또는-

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 어셈블리의 이름(즉, 동적 어셈블리를 만드는 데 사용되는 AssemblyNameAssemblyName.Name 속성)과 동일해야 하며, fileName 어셈블리를 저장할 때 지정한 파일 이름과 동일해야 합니다.

모듈이 하나만 있는 어셈블리에서 해당 모듈은 어셈블리 매니페스트를 포함해야 합니다.

메모

동적 모듈을 디버깅할 때 최적화를 억제하려면 DefineDynamicModule호출하기 전에 DebuggableAttribute 특성을 동적 어셈블리에 적용합니다. DisableOptimizations 플래그를 사용하여 DebuggableAttribute 인스턴스를 만들고 SetCustomAttribute 메서드를 사용하여 적용합니다. 특성을 동적 어셈블리에 적용해야 합니다. 모듈에 적용해도 아무런 효과가 없습니다.

메모

.NET Framework 2.0 서비스 팩 1부터 이 멤버는 더 이상 ReflectionPermissionFlag.ReflectionEmit 플래그를 사용하여 ReflectionPermission 필요가 없습니다. (리플렉션 내보내기보안 문제를 참조하세요.) 이 기능을 사용하려면 애플리케이션이 .NET Framework 3.5 이상을 대상으로 해야 합니다.

적용 대상