Skip to content

Latest commit

 

History

History
54 lines (38 loc) · 1.6 KB

README.md

File metadata and controls

54 lines (38 loc) · 1.6 KB

Aqla.RunSharp

RunSharp is a runtime IL generator based on Reflection.Emit and IKVM which allows you to emit IL in a way similar to writing normal C# code.

It's a layer above the standard .NET Reflection.Emit API, allowing to generate/compile dynamic code at runtime very quickly and efficiently (unlike using CodeDOM and invoking the C# compiler).

The IKVM version has also an ability to emit NET 2.0 and .NET 4.0 assemblies (while running on, for example, .NET 3.0).

It is a fork of RunSharp from Google Code: https://code.google.com/p/runsharp/

  • added IKVM support (nuget: Aqla.RunSharp.IKVM)
  • examples converted to tests
  • added peverify checks
  • fixed multiple bugs

nuget: aqla.runsharp

Example

A simple hello world example in C#

public class Test
{
   public static void Main(string[] args)
   {
      Console.WriteLine("Hello " + args[0]);
   }
}

can be dynamically generated using RunSharp as follows:

AssemblyGen ag = new AssemblyGen("Hello", new CompilerOptions() { OutputPath = "Hello.exe" });
TypeGen Test = ag.Public.Class("Test");
{
   CodeGen g = Test.Public.Static.Method(typeof(void), "Main", typeof(string[]));
   {
      ContextualOperand args = g.Param(0, "args");
      g.Invoke(typeof(Console), "WriteLine", "Hello " + args[0] + "!");
   }
}
ag.Save();

The above code should generate roughly the same assembly as if the first example was compiled using csc.

For more examples please see tests.

Platforms

  • .NET Standard 2.1 (including .NET Core 3 and .NET 5)
  • .NET 2.0 and higher including .NET 4 (also IKVM version available)
  • Windows Phone 8
  • Silverlight 5
  • Xamarin.Android