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

Comments

Popular posts from this blog

How to enable Kerberos Delegation in Google Chrome

Parse XML to dynamic object in C#