using System;
using System.Reflection;
using System.Reflection.Emit;
using System.IO;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Collections.Generic;
public class DemoAssemblyBuilder
{
public string sample = "Hai";
public static void Main(string[] args)
{
string filepath = "Dir to save the file";
CspParameters parms = new CspParameters();
parms.KeyNumber = 2;
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(parms);
byte[] bykey = provider.ExportCspBlob(!provider.PublicOnly);
AssemblyName aName = new AssemblyName("DynamicAssemblyExample");
aName.Version = new Version(1, 0, 0, 1);
StrongNameKeyPair ss = new StrongNameKeyPair(bykey);
aName.KeyPair = ss;
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.RunAndSave,filepath);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
TypeBuilder tb = mb.DefineType("SampleClass",TypeAttributes.Public);
// create a new class SampleClass
staticNumber = tb.DefineField("Name1", typeof(string), FieldAttributes.Public | FieldAttributes.Static);
staticNumber.SetValue(tb.GetType(), "srinu");
////generating properties for storing string value
PropertyBuilder pbName = tb.DefineProperty("Name", PropertyAttributes.None, typeof(Dictionary<string,string>), null);
MethodAttributes getsetpbName = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.Static;
string z = "Hello world";
MethodBuilder mbNameGetAccessor = tb.DefineMethod("get_Name", getsetpbName, typeof(Dictionary<string, string>), Type.EmptyTypes);
ILGenerator NameGetIL = mbNameGetAccessor.GetILGenerator();
NameGetIL.Emit(OpCodes.Ldstr,dic);
NameGetIL.Emit(OpCodes.Ret);
pbName.SetGetMethod(mbNameGetAccessor);
//generating properties for storing int value
PropertyBuilder pbNumber = tb.DefineProperty("Number", PropertyAttributes.None, typeof(int), null);
MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
int x = 20;
MethodBuilder mbNumberGetAccessor = tb.DefineMethod("get_Number", getSetAttr, typeof(int), Type.EmptyTypes);
ILGenerator numberGetIL = mbNumberGetAccessor.GetILGenerator();
numberGetIL.Emit(OpCodes.Ldc_I4, x);
numberGetIL.Emit(OpCodes.Ret);
pbNumber.SetGetMethod(mbNumberGetAccessor);
// Finish the type.
Type t = tb.CreateType();
ab.Save(aName.Name + ".dll");
}
}
using System.Reflection;
using System.Reflection.Emit;
using System.IO;
using System.Diagnostics;
using System.Security.Cryptography;
using System.Collections.Generic;
public class DemoAssemblyBuilder
{
public string sample = "Hai";
public static void Main(string[] args)
{
string filepath = "Dir to save the file";
CspParameters parms = new CspParameters();
parms.KeyNumber = 2;
RSACryptoServiceProvider provider = new RSACryptoServiceProvider(parms);
byte[] bykey = provider.ExportCspBlob(!provider.PublicOnly);
AssemblyName aName = new AssemblyName("DynamicAssemblyExample");
aName.Version = new Version(1, 0, 0, 1);
StrongNameKeyPair ss = new StrongNameKeyPair(bykey);
aName.KeyPair = ss;
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.RunAndSave,filepath);
ModuleBuilder mb = ab.DefineDynamicModule(aName.Name, aName.Name + ".dll");
TypeBuilder tb = mb.DefineType("SampleClass",TypeAttributes.Public);
// create a new class SampleClass
staticNumber = tb.DefineField("Name1", typeof(string), FieldAttributes.Public | FieldAttributes.Static);
staticNumber.SetValue(tb.GetType(), "srinu");
////generating properties for storing string value
PropertyBuilder pbName = tb.DefineProperty("Name", PropertyAttributes.None, typeof(Dictionary<string,string>), null);
MethodAttributes getsetpbName = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.Static;
string z = "Hello world";
MethodBuilder mbNameGetAccessor = tb.DefineMethod("get_Name", getsetpbName, typeof(Dictionary<string, string>), Type.EmptyTypes);
ILGenerator NameGetIL = mbNameGetAccessor.GetILGenerator();
NameGetIL.Emit(OpCodes.Ldstr,dic);
NameGetIL.Emit(OpCodes.Ret);
pbName.SetGetMethod(mbNameGetAccessor);
//generating properties for storing int value
PropertyBuilder pbNumber = tb.DefineProperty("Number", PropertyAttributes.None, typeof(int), null);
MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
int x = 20;
MethodBuilder mbNumberGetAccessor = tb.DefineMethod("get_Number", getSetAttr, typeof(int), Type.EmptyTypes);
ILGenerator numberGetIL = mbNumberGetAccessor.GetILGenerator();
numberGetIL.Emit(OpCodes.Ldc_I4, x);
numberGetIL.Emit(OpCodes.Ret);
pbNumber.SetGetMethod(mbNumberGetAccessor);
// Finish the type.
Type t = tb.CreateType();
ab.Save(aName.Name + ".dll");
}
}
No comments:
Post a Comment