在Roslyn中解析嵌入式表达式

Gro*_*kys 3 c# razor roslyn

我正在尝试为类似QML的标记语言编写解析器,我想在标记中允许C#表达式.所以一个例子可能如下所示:

ClassName {
    Property1: 10
    Property2: Math.Sqrt(123)
    Property3: string.Format("{0} {1}", "Hello", "World")
}
Run Code Online (Sandbox Code Playgroud)

(这也有点像ASP.NET的Razor引擎,但是afaics Razor不使用Roslyn?)

我该怎么做?我只想解析一个表达式,无论是文字,方法调用,lambda等.我试过使用CSharpSyntaxTree.ParseText但是需要一个完整的文件而我找不到任何与此用法相关的文档 -案件.

SLa*_*aks 6

您需要调用CSharpSyntaxTree.ParseText()并传递一个允许顶级表达式的CSharpParseOptionswith SourceCodeKind.Interactive.