MonoScript is a library for .NET that allows you to use C# as if it were a scripting language like Lua, Squirrel, AngelScript, etc.
It achieves this by embedding the Mono C# compiler (MCS), and providing an API to work with it.
MonoScript is designed with sandboxing in mind, in order to make it more approachable for usage within games (its intended use-case). As a result, you have complete control over what types and namespaces are made accessible to scripts.
In order to compile MonoScript, you will first need to compile jay
. It should be as simple as building the included Premake project, refer to the Premake documentation for information on how to do so.
Once jay
has been compiled, simply open the MonoScript solution and build it.
Using MonoScript is very simple.
- Create an instance of the
ScriptBuilder
class and callStart()
on it. - Import any types, references and namespaces you wish to make accessible to scripts.
- Build the module with
var success = builder.Build(out var module);
- Use
module.GetTypes()
to retrieve the script types.
using System;
namespace MonoScript.Sample
{
public struct MyStruct
{
public string Message;
public override string ToString()
{
return Message;
}
}
internal class Program
{
public static void Main(string[] args)
{
var builder = new ScriptBuilder();
builder.Start();
builder.ImportType(typeof(Console));
builder.ImportType<MyStruct>();
builder.AddFromString("Example.cs", @"
using System;
using MonoScript.Sample;
public class MyClass
{
public MyClass()
{
var myStruct = new MyStruct
{
Message = ""Hello, world!""
};
Console.WriteLine(myStruct);
}
}");
if (!builder.Build(out var module))
Console.WriteLine("Failed. {0} error(s). {1} warning(s).", module.ErrorCount, module.WarningCount);
else
{
Console.WriteLine("Succeeded. {0} warning(s).", module.WarningCount);
foreach (var type in module.GetTypes())
Activator.CreateInstance(type);
}
Console.WriteLine("Press any key to exit . . .");
Console.ReadKey();
}
}
}
MonoScript has been tested under and confirmed to work with the experimental .NET 4.6 target for Unity projects found in Unity 2017.1 and above.
MonoScript is licensed under the MIT license.