Monday, 16 July 2012

C# Scripting with Microsoft Roslyn

If you’re not familiar with Microsoft “Roslyn” please read Interactive C# Microsoft Roslyn.

[TestFixture]
public class TestScript
{
  [Test]
  public void TestSimple()
  {
    var engine = new ScriptEngine();
    Console.WriteLine(engine.Execute("1+1"));
    Console.WriteLine(engine.Execute<int>("1+1"));
  }
 
  [Test]
  public void TestSession()
  {
    var engine = new ScriptEngine();
    var session = Session.Create();
      
    engine.Execute("int x = 1, y;", session);
    engine.Execute("if(x==1)y = 10; else y = 20;",session);
    Console.WriteLine(engine.Execute("y", session));
  }
 
  [Test]
  public void TestScriptFile()
  {
    var engine = new ScriptEngine();
    ScriptContext context = new ScriptContext();
    engine.ExecuteFile("Test.csx", context);
  }
 
  [Test]
  public void TestScriptFileHostObject()
  {
    var context = new ScriptContext();
    var engine = new ScriptEngine(new[] { context.GetType().Assembly.Location });
    var session = Session.Create(context);
 
    context.Name = "Tom";
    context.Parameters.Add("Input", "Hello");
    engine.ExecuteFile("TestHost.csx", session);
 
    Console.WriteLine(context.Parameters["Output"]);
  }
}
 
public class ScriptContext
{
  public Dictionary<string, object> Parameters { get; set; }
  public string Name { get; set; }
 
  public ScriptContext()
  {
    Parameters = new Dictionary<string, object>();
  }
}

Test.csx

using System;
 
var hello = "Hello";
Console.WriteLine(hello);

TestHost.csx

using System;
 
var output = string.Format("{0} {1}",Parameters["Input"], Name);
 
Parameters.Add("Output", output);

You can read more on the subject here Introduction to the Roslyn Scripting API

No comments:

Post a Comment