Cauldron/Cauldron.Core/RoslynHost.cs

36 lines
941 B
C#
Raw Normal View History

2023-07-19 22:09:25 +00:00
using Microsoft.CodeAnalysis.CSharp.Scripting;
2023-07-19 19:30:39 +00:00
using Microsoft.CodeAnalysis.Scripting;
2023-07-21 20:11:56 +00:00
namespace Cauldron.Core;
2023-07-19 19:30:39 +00:00
public class RoslynHost
{
/// <summary>
/// Run the provided C# script
/// </summary>
/// <param name="code">The script to run</param>
/// <param name="imports">Namespace imports for the script</param>
/// <param name="globals">Values that will be made available to the script</param>
/// <param name="cancellationToken"></param>
public static async Task RunScript(string code, string[] imports,
RoslynHostGlobals globals,
CancellationToken cancellationToken = default)
{
ScriptOptions options = ScriptOptions.Default
.AddImports(imports);
2023-07-19 22:09:25 +00:00
await CSharpScript.RunAsync(code, options, globals,
cancellationToken: cancellationToken);
2023-07-19 19:30:39 +00:00
}
}
public class RoslynHostGlobals
{
2023-07-21 20:11:56 +00:00
public CauldronWriter Cauldron { get; set; }
2023-07-19 19:30:39 +00:00
2023-07-21 20:11:56 +00:00
public RoslynHostGlobals(CauldronWriter writer)
2023-07-19 19:30:39 +00:00
{
2023-07-21 20:11:56 +00:00
this.Cauldron = writer;
2023-07-19 19:30:39 +00:00
}
}