using System; using System.Collections.Generic; using System.Text; using System.Reflection.Emit; using System.Threading; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { AppDomain myDomain = Thread.GetDomain(); AssemblyName myAsseblyName = new AssemblyName(); myAsseblyName.Name = "CreatingDynamicAssembliesDemo"; AssemblyBuilder myAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsseblyName, AssemblyBuilderAccess.RunAndSave); ModuleBuilder stuModule = CreateModule(myAssemblyBuilder, myAsseblyName); TypeBuilder stuTypeBuilder = CreateStudentTypeBuilder(stuModule); CreateFullNameField(stuTypeBuilder); CreateFullNameProperty(stuTypeBuilder); myAssemblyBuilder.Save(myAsseblyName.Name + ".dll"); } public static ModuleBuilder CreateModule(AssemblyBuilder stuAssemblyBuilder, AssemblyName stuAssemblyName) { ModuleBuilder myModBuilder = stuAssemblyBuilder.DefineDynamicModule(stuAssemblyName.Name,stuAssemblyName.Name + ".dll"); return myModBuilder; } public static TypeBuilder CreateStudentTypeBuilder(ModuleBuilder stuModuleBuilder) { TypeBuilder stuTypeBuilder = stuModuleBuilder.DefineType("Student", TypeAttributes.Public); return stuTypeBuilder; } public static void CreateFullNameField(TypeBuilder stuTypeBuilder) { FieldBuilder stuFullNameFieldBuilder = stuTypeBuilder.DefineField("FullName",typeof(string),FieldAttributes.Private); } public static void CreateFullNameProperty(TypeBuilder stuTypeBuilder) { PropertyBuilder stuFullNamePropBuilder = stuTypeBuilder.DefineProperty("FullName",PropertyAttributes.None,typeof(string),null); MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig; MethodBuilder stuFullNameGetPropMethodBuilder = stuTypeBuilder.DefineMethod("Get_FullName",getSetAttr,typeof(string),Type.EmptyTypes); ILGenerator custNameGetIL = stuFullNameGetPropMethodBuilder.GetILGenerator(); custNameGetIL.Emit(OpCodes.Ldarg_0); custNameGetIL.Emit(OpCodes.Ldfld,stuFullNameGetPropMethodBuilder); custNameGetIL.Emit(OpCodes.Ret); MethodBuilder stuFullNameSetPropMethodBuilder = stuTypeBuilder.DefineMethod("Set_FullName", getSetAttr, null, new Type[] { typeof(string)}); ILGenerator custNameSetIL = stuFullNameSetPropMethodBuilder.GetILGenerator(); custNameSetIL.Emit(OpCodes.Ldarg_0); custNameSetIL.Emit(OpCodes.Ldarg_1); custNameSetIL.Emit(OpCodes.Stfld,stuFullNameSetPropMethodBuilder); custNameSetIL.Emit(OpCodes.Ret); stuFullNamePropBuilder.SetGetMethod(stuFullNameGetPropMethodBuilder); stuFullNamePropBuilder.SetSetMethod(stuFullNameSetPropMethodBuilder); } } }