Skip to content

CodeCompiler module

Robert B Colton edited this page Aug 12, 2016 · 1 revision

Uses Roslyn to compile C# code. Currently, ICodeCompiler exposes a very simple interface:

public interface ICodeCompiler
{
    Assembly Compile(
        IEnumerable<SyntaxTree> syntaxTrees, 
        IEnumerable<MetadataReference> references,
        string outputName);
}

An interesting feature, made possible by Roslyn, is that the compiled assemblies are garbage-collectible. This means that you can compile C# source code, run the resulting assembly in the same AppDomain as your main application, and then unload the assembly from memory. This would be very useful, for example, in a game editor where you want the game preview window to update as soon as the user modifies a script source file.

Provides

  • ICodeCompiler service

NuGet package

Dependencies

Usage

This example is from HelixViewModel in one of the sample applications.

var newAssembly = _codeCompiler.Compile(
    new[] { SyntaxTree.ParseText(_helixView.TextEditor.Text) },
    new[]
    {
        MetadataReference.CreateAssemblyReference("mscorlib"),
        MetadataReference.CreateAssemblyReference("System"),
        MetadataReference.CreateAssemblyReference("PresentationCore"),
        new MetadataFileReference(typeof(IResult).Assembly.Location),
        new MetadataFileReference(typeof(AppBootstrapper).Assembly.Location),
        new MetadataFileReference(GetType().Assembly.Location)
    },
    "GeminiDemoScript");

Once there are no references to newAssembly, it will be eligible for garbage collection.

Clone this wiki locally