Monday, June 20, 2011

Generating Dll With signing programmatically

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");    

    }
}

No comments:

Post a Comment