This is probably the most wonderful this I have explored in .net. What happens here is a user can actually make the EXE file on the fly. System.Runtime.Emit Namespace provides necessary class to do this.
After compiling this file and running it on the Console a new file is generated in your folder called TestAsm.exe. This Exe file print's a message "Hello World" on the Console.
Source Code
//RuntimeEmit.cs
using System;
using System.Runtime;
using System.Runtime.Emit;
Class RuntimeEmit
{
public static void Main(String [] args)
{
AppDomain ad = AppDomain.CurrentDomain;
AssemblyName am = new AssemblyName();
am.Name = "TestAsm";
AssemblyBuilder ab = ad.DefineDynamicAssembly(am,AssemblyBuilderAccess.Save);
ModuleBuilder mb = ab.DefineDynamicModule("testmod","TestAsm.exe");
TypeBuilder tb = mb.DefineType("mytype",TypeAttributes.Public);
MethodBuilder metb = tb.DefineMethod("hi",MethodAttributes.Public | MethodAttributes.Static,null,null);
mb.SetEntryPoint(metb);
ILGenerator il = metb.GetILGenerator();
il.EmitWriteLine("Hello World");
il.Emit(OpCodes.Ret);
tb.CreateType();
ab.Save("TestAsm.exe");
}
}
Save this file as RuntimeEmit.cs and Compile C:/>csc RuntimeEmit.cs and run this file C:\>RuntimeEmit
to run the Exe file generated C:\>TestAsm
Join the conversation! Your thoughts help the community grow.
Sign in to leave a comment
It is the same account you read, post and publish with — and you will come straight back to this page.
John CornerPosted Aug 18, 2010, 1:39 PM
The code has some problem and will not compile. using System; using System.Reflection; using System.Reflection.Emit; class RuntimeEmit { public static void Main(String[] args) { AppDomain ad = AppDomain.CurrentDomain; AssemblyName am = new AssemblyName(); am.Name = "TestAsm"; AssemblyBuilder ab = ad.DefineDynamicAssembly(am, AssemblyBuilderAccess.Save); ModuleBuilder mb = ab.DefineDynamicModule("testmod", "TestAsm.exe"); TypeBuilder tb = mb.DefineType("mytype", TypeAttributes.Public); MethodBuilder metb = tb.DefineMethod("hi", MethodAttributes.Public | MethodAttributes.Static, null, null); ab.SetEntryPoint(metb); ILGenerator il = metb.GetILGenerator(); il.EmitWriteLine("Hello World"); il.Emit(OpCodes.Ret); tb.CreateType(); ab.Save("TestAsm.exe"); } }
Siva NPosted Nov 21, 2007, 10:26 AM
Hi.... I need Code for converting files to .exe(setup)...