ModuleBuilder
Class
Definition
Defines and represents a module in a dynamic assembly.
[System.Runtime.InteropServices.ClassInterface(System.Runtime.InteropServices.ClassInterfaceType.None)]
[System.Runtime.InteropServices.ComVisible(true)]
public class ModuleBuilder : System.Reflection.Module, System.Runtime.InteropServices._ModuleBuilder
- Inheritance
- Attributes
- Implements
Inherited Members
System.Object
System.Reflection.Module
Examples
The following code sample demonstrates the use of ModuleBuilder to create a dynamic module. Note that the ModuleBuilder is created by calling DefineDynamicModule in AssemblyBuilder, rather than through a constructor.
using namespace System;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
public ref class CodeGenerator
{
private:
AssemblyBuilder^ myAssemblyBuilder;
public:
CodeGenerator()
{
// Get the current application domain for the current thread.
AppDomain^ myCurrentDomain = AppDomain::CurrentDomain;
AssemblyName^ myAssemblyName = gcnew AssemblyName;
myAssemblyName->Name = "TempAssembly";
// Define a dynamic assembly in the current application domain.
myAssemblyBuilder = myCurrentDomain->DefineDynamicAssembly( myAssemblyName, AssemblyBuilderAccess::Run );
// Define a dynamic module in this assembly.
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->DefineDynamicModule( "TempModule" );
// Define a runtime class with specified name and attributes.
TypeBuilder^ myTypeBuilder = myModuleBuilder->DefineType( "TempClass", TypeAttributes::Public );
// Add 'Greeting' field to the class, with the specified attribute and type.
FieldBuilder^ greetingField = myTypeBuilder->DefineField( "Greeting", String::typeid, FieldAttributes::Public );
array<Type^>^myMethodArgs = {String::typeid};
// Add 'MyMethod' method to the class, with the specified attribute and signature.
MethodBuilder^ myMethod = myTypeBuilder->DefineMethod( "MyMethod", MethodAttributes::Public, CallingConventions::Standard, nullptr, myMethodArgs );
ILGenerator^ methodIL = myMethod->GetILGenerator();
methodIL->EmitWriteLine( "In the method..." );
methodIL->Emit( OpCodes::Ldarg_0 );
methodIL->Emit( OpCodes::Ldarg_1 );
methodIL->Emit( OpCodes::Stfld, greetingField );
methodIL->Emit( OpCodes::Ret );
myTypeBuilder->CreateType();
}
property AssemblyBuilder^ MyAssembly
{
AssemblyBuilder^ get()
{
return this->myAssemblyBuilder;
}
}
};
int main()
{
CodeGenerator^ myCodeGenerator = gcnew CodeGenerator;
// Get the assembly builder for 'myCodeGenerator' object.
AssemblyBuilder^ myAssemblyBuilder = myCodeGenerator->MyAssembly;
// Get the module builder for the above assembly builder object .
ModuleBuilder^ myModuleBuilder = myAssemblyBuilder->GetDynamicModule( "TempModule" );
Console::WriteLine( "The fully qualified name and path to this module is :{0}", myModuleBuilder->FullyQualifiedName );
Type^ myType = myModuleBuilder->GetType( "TempClass" );
MethodInfo^ myMethodInfo = myType->GetMethod( "MyMethod" );
// Get the token used to identify the method within this module.
MethodToken myMethodToken = myModuleBuilder->GetMethodToken( myMethodInfo );
Console::WriteLine( "Token used to identify the method of 'myType'"
" within the module is {0:x}", myMethodToken.Token );
array<Object^>^args = {"Hello."};
Object^ myObject = Activator::CreateInstance( myType, nullptr, nullptr );
myMethodInfo->Invoke( myObject, args );
}
using System;
using System.Reflection;
using System.Reflection.Emit;
using System.Security.Permissions;
public class CodeGenerator
{
AssemblyBuilder myAssemblyBuilder;
public CodeGenerator()
{
// Get the current application domain for the current thread.
AppDomain myCurrentDomain = AppDomain.CurrentDomain;
AssemblyName myAssemblyName = new AssemblyName();
myAssemblyName.Name = "TempAssembly";
// Define a dynamic assembly in the current application domain.
myAssemblyBuilder = myCurrentDomain.DefineDynamicAssembly
(myAssemblyName, AssemblyBuilderAccess.Run);
// Define a dynamic module in this assembly.
ModuleBuilder myModuleBuilder = myAssemblyBuilder.
DefineDynamicModule("TempModule");
// Define a runtime class with specified name and attributes.
TypeBuilder myTypeBuilder = myModuleBuilder.DefineType
("TempClass",TypeAttributes.Public);
// Add 'Greeting' field to the class, with the specified attribute and type.
FieldBuilder greetingField = myTypeBuilder.DefineField("Greeting",
typeof(String), FieldAttributes.Public);
Type[] myMethodArgs = { typeof(String) };
// Add 'MyMethod' method to the class, with the specified attribute and signature.
MethodBuilder myMethod = myTypeBuilder.DefineMethod("MyMethod",
MethodAttributes.Public, CallingConventions.Standard, null,myMethodArgs);
ILGenerator methodIL = myMethod.GetILGenerator();
methodIL.EmitWriteLine("In the method...");
methodIL.Emit(OpCodes.Ldarg_0);
methodIL.Emit(OpCodes.Ldarg_1);
methodIL.Emit(OpCodes.Stfld, greetingField);
methodIL.Emit(OpCodes.Ret);
myTypeBuilder.CreateType();
}
public AssemblyBuilder MyAssembly
{
get
{
return this.myAssemblyBuilder;
}
}
}
public class TestClass
{
[PermissionSetAttribute(SecurityAction.Demand, Name="FullTrust")]
public static void Main()
{
CodeGenerator myCodeGenerator = new CodeGenerator();
// Get the assembly builder for 'myCodeGenerator' object.
AssemblyBuilder myAssemblyBuilder = myCodeGenerator.MyAssembly;
// Get the module builder for the above assembly builder object .
ModuleBuilder myModuleBuilder = myAssemblyBuilder.
GetDynamicModule("TempModule");
Console.WriteLine("The fully qualified name and path to this "
+ "module is :" +myModuleBuilder.FullyQualifiedName);
Type myType = myModuleBuilder.GetType("TempClass");
MethodInfo myMethodInfo =
myType.GetMethod("MyMethod");
// Get the token used to identify the method within this module.
MethodToken myMethodToken =
myModuleBuilder.GetMethodToken(myMethodInfo);
Console.WriteLine("Token used to identify the method of 'myType'"
+ " within the module is {0:x}",myMethodToken.Token);
object[] args={"Hello."};
object myObject = Activator.CreateInstance(myType,null,null);
myMethodInfo.Invoke(myObject,args);
}
}
Imports System
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Security.Permissions
Public Class CodeGenerator
Private myAssemblyBuilder As AssemblyBuilder
Public Sub New()
' Get the current application domain for the current thread.
Dim myCurrentDomain As AppDomain = AppDomain.CurrentDomain
Dim myAssemblyName As New AssemblyName()
myAssemblyName.Name = "TempAssembly"
' Define a dynamic assembly in the current application domain.
myAssemblyBuilder = _
myCurrentDomain.DefineDynamicAssembly(myAssemblyName, AssemblyBuilderAccess.Run)
' Define a dynamic module in this assembly.
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.DefineDynamicModule("TempModule")
' Define a runtime class with specified name and attributes.
Dim myTypeBuilder As TypeBuilder = _
myModuleBuilder.DefineType("TempClass", TypeAttributes.Public)
' Add 'Greeting' field to the class, with the specified attribute and type.
Dim greetingField As FieldBuilder = _
myTypeBuilder.DefineField("Greeting", GetType(String), FieldAttributes.Public)
Dim myMethodArgs As Type() = {GetType(String)}
' Add 'MyMethod' method to the class, with the specified attribute and signature.
Dim myMethod As MethodBuilder = _
myTypeBuilder.DefineMethod("MyMethod", MethodAttributes.Public, _
CallingConventions.Standard, Nothing, myMethodArgs)
Dim methodIL As ILGenerator = myMethod.GetILGenerator()
methodIL.EmitWriteLine("In the method...")
methodIL.Emit(OpCodes.Ldarg_0)
methodIL.Emit(OpCodes.Ldarg_1)
methodIL.Emit(OpCodes.Stfld, greetingField)
methodIL.Emit(OpCodes.Ret)
myTypeBuilder.CreateType()
End Sub 'New
Public ReadOnly Property MyAssembly() As AssemblyBuilder
Get
Return Me.myAssemblyBuilder
End Get
End Property
End Class 'CodeGenerator
Public Class TestClass
<PermissionSetAttribute(SecurityAction.Demand, Name:="FullTrust")> _
Public Shared Sub Main()
Dim myCodeGenerator As New CodeGenerator()
' Get the assembly builder for 'myCodeGenerator' object.
Dim myAssemblyBuilder As AssemblyBuilder = myCodeGenerator.MyAssembly
' Get the module builder for the above assembly builder object .
Dim myModuleBuilder As ModuleBuilder = myAssemblyBuilder.GetDynamicModule("TempModule")
Console.WriteLine("The fully qualified name and path to this " + _
"module is :" + myModuleBuilder.FullyQualifiedName)
Dim myType As Type = myModuleBuilder.GetType("TempClass")
Dim myMethodInfo As MethodInfo = myType.GetMethod("MyMethod")
' Get the token used to identify the method within this module.
Dim myMethodToken As MethodToken = myModuleBuilder.GetMethodToken(myMethodInfo)
Console.WriteLine("Token used to identify the method of 'myType'" + _
" within the module is {0:x}", myMethodToken.Token)
Dim args As Object() = {"Hello."}
Dim myObject As Object = Activator.CreateInstance(myType, Nothing, Nothing)
myMethodInfo.Invoke(myObject, args)
End Sub 'Main
End Class 'TestClass
Remarks
To get an instance of ModuleBuilder, use the AssemblyBuilder.DefineDynamicModule method.
Constructors
| ModuleBuilder() |
Properties
| Assembly |
Gets the dynamic assembly that defined this instance of ModuleBuilder. |
| FullyQualifiedName |
Gets a |
| MDStreamVersion |
Gets the metadata stream version. |
| MetadataToken |
Gets a token that identifies the current dynamic module in metadata. |
| ModuleVersionId |
Gets a universally unique identifier (UUID) that can be used to distinguish between two versions of a module. |
| Name |
A string that indicates that this is an in-memory module. |
| ScopeName |
Gets a string that represents the name of the dynamic module. |
Methods
| CreateGlobalFunctions() |
Completes the global function definitions and global data definitions for this dynamic module. |
| DefineDocument(String, Guid, Guid, Guid) |
Defines a document for source. |
| DefineEnum(String, TypeAttributes, Type) |
Defines an enumeration type that is a value type with a single non-static field called |
| DefineGlobalMethod(String, MethodAttributes, Type, Type[]) |
Defines a global method with the specified name, attributes, return type, and parameter types. |
| DefineGlobalMethod(String, MethodAttributes, CallingConventions, Type, Type[]) |
Defines a global method with the specified name, attributes, calling convention, return type, and parameter types. |
| DefineGlobalMethod(String, MethodAttributes, CallingConventions, Type, Type[], Type[], Type[], Type[][], Type[][]) |
Defines a global method with the specified name, attributes, calling convention, return type, custom modifiers for the return type, parameter types, and custom modifiers for the parameter types. |
| DefineInitializedData(String, Byte[], FieldAttributes) |
Defines an initialized data field in the .sdata section of the portable executable (PE) file. |
| DefineManifestResource(String, Stream, ResourceAttributes) |
Defines a binary large object (BLOB) that represents a manifest resource to be embedded in the dynamic assembly. |
| DefinePInvokeMethod(String, String, MethodAttributes, CallingConventions, Type, Type[], CallingConvention, CharSet) |
Defines a |
| DefinePInvokeMethod(String, String, String, MethodAttributes, CallingConventions, Type, Type[], CallingConvention, CharSet) |
Defines a |
| DefineResource(String, String) |
Defines the named managed embedded resource to be stored in this module. |
| DefineResource(String, String, ResourceAttributes) |
Defines the named managed embedded resource with the given attributes that is to be stored in this module. |
| DefineType(String, TypeAttributes, Type, PackingSize, Int32) |
Constructs a |
| DefineType(String, TypeAttributes, Type, Type[]) |
Constructs a |
| DefineType(String, TypeAttributes, Type, Int32) |
Constructs a |
| DefineType(String, TypeAttributes, Type, PackingSize) |
Constructs a |
| DefineType(String, TypeAttributes) |
Constructs a |
| DefineType(String) |
Constructs a |
| DefineType(String, TypeAttributes, Type) |
Constructs a |
| DefineUninitializedData(String, Int32, FieldAttributes) |
Defines an uninitialized data field in the .sdata section of the portable executable (PE) file. |
| DefineUnmanagedResource(Byte[]) |
Defines an unmanaged embedded resource given an opaque binary large object (BLOB) of bytes. |
| DefineUnmanagedResource(String) |
Defines an unmanaged resource given the name of Win32 resource file. |
| Equals(Object) |
Returns a value that indicates whether this instance is equal to the specified object. |
| GetArrayMethod(Type, String, CallingConventions, Type, Type[]) |
Returns the named method on an array class. |
| GetArrayMethodToken(Type, String, CallingConventions, Type, Type[]) |
Returns the token for the named method on an array class. |
| GetConstructorToken(ConstructorInfo) |
Returns the token used to identify the specified constructor within this module. |
| GetConstructorToken(ConstructorInfo, IEnumerable<Type>) |
Returns the token used to identify the constructor that has the specified attributes and parameter types within this module. |
| GetCustomAttributes(Boolean) |
Returns all the custom attributes that have been applied to the current ModuleBuilder. |
| GetCustomAttributes(Type, Boolean) |
Returns all the custom attributes that have been applied to the current ModuleBuilder, and that derive from a specified attribute type. |
| GetCustomAttributesData() |
Returns information about the attributes that have been applied to the current ModuleBuilder, expressed as CustomAttributeData objects. |
| GetField(String, BindingFlags) |
Returns a module-level field, defined in the .sdata region of the portable executable (PE) file, that has the specified name and binding attributes. |
| GetFields(BindingFlags) |
Returns all fields defined in the .sdata region of the portable executable (PE) file that match the specified binding flags. |
| GetFieldToken(FieldInfo) |
Returns the token used to identify the specified field within this module. |
| GetHashCode() |
Returns the hash code for this instance. |
| GetMethodImpl(String, BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[]) |
Returns the module-level method that matches the specified criteria. |
| GetMethods(BindingFlags) |
Returns all the methods that have been defined at the module level for the current ModuleBuilder, and that match the specified binding flags. |
| GetMethodToken(MethodInfo) |
Returns the token used to identify the specified method within this module. |
| GetMethodToken(MethodInfo, IEnumerable<Type>) |
Returns the token used to identify the method that has the specified attributes and parameter types within this module. |
| GetPEKind(PortableExecutableKinds, ImageFileMachine) |
Gets a pair of values indicating the nature of the code in a module and the platform targeted by the module. |
| GetSignatureToken(SignatureHelper) |
Defines a token for the signature that is defined by the specified SignatureHelper. |
| GetSignatureToken(Byte[], Int32) |
Defines a token for the signature that has the specified character array and signature length. |
| GetSignerCertificate() |
Returns an X509Certificate object corresponding to the certificate included in the Authenticode signature of the assembly which this module belongs to. If the assembly has not been Authenticode signed, |
| GetStringConstant(String) |
Returns the token of the given string in the module’s constant pool. |
| GetSymWriter() |
Returns the symbol writer associated with this dynamic module. |
| GetType(String) |
Gets the named type defined in the module. |
| GetType(String, Boolean) |
Gets the named type defined in the module, optionally ignoring the case of the type name. |
| GetType(String, Boolean, Boolean) |
Gets the named type defined in the module, optionally ignoring the case of the type name. Optionally throws an exception if the type is not found. |
| GetTypes() |
Returns all the classes defined within this module. |
| GetTypeToken(String) |
Returns the token used to identify the type with the specified name. |
| GetTypeToken(Type) |
Returns the token used to identify the specified type within this module. |
| IsDefined(Type, Boolean) |
Returns a value that indicates whether the specified attribute type has been applied to this module. |
| IsResource() |
Gets a value indicating whether the object is a resource. |
| IsTransient() |
Returns a value that indicates whether this dynamic module is transient. |
| ResolveField(Int32, Type[], Type[]) |
Returns the field identified by the specified metadata token, in the context defined by the specified generic type parameters. |
| ResolveMember(Int32, Type[], Type[]) |
Returns the type or member identified by the specified metadata token, in the context defined by the specified generic type parameters. |
| ResolveMethod(Int32, Type[], Type[]) |
Returns the method or constructor identified by the specified metadata token, in the context defined by the specified generic type parameters. |
| ResolveSignature(Int32) |
Returns the signature blob identified by a metadata token. |
| ResolveString(Int32) |
Returns the string identified by the specified metadata token. |
| ResolveType(Int32, Type[], Type[]) |
Returns the type identified by the specified metadata token, in the context defined by the specified generic type parameters. |
| SetCustomAttribute(CustomAttributeBuilder) |
Applies a custom attribute to this module by using a custom attribute builder. |
| SetCustomAttribute(ConstructorInfo, Byte[]) |
Applies a custom attribute to this module by using a specified binary large object (BLOB) that represents the attribute. |
| SetSymCustomAttribute(String, Byte[]) |
This method does nothing. |
| SetUserEntryPoint(MethodInfo) |
Sets the user entry point. |
Explicit Interface Implementations
| _ModuleBuilder.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
For a description of this member, see GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr). |
| _ModuleBuilder.GetTypeInfo(UInt32, UInt32, IntPtr) |
For a description of this member, see GetTypeInfo(UInt32, UInt32, IntPtr). |
| _ModuleBuilder.GetTypeInfoCount(UInt32) |
For a description of this member, see GetTypeInfoCount(UInt32). |
| _ModuleBuilder.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
For a description of this member, see Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr). |