如何在Roslyn中获取未解析的符号?

时间:2017-03-01 08:44:24

标签: c# roslyn

我正在使用Roslyn在C#中构建脚本引擎,我想从用户编译一段代码。在脚本用户界面中,用户可以添加对我不了解的其他C#dll的引用。

在用户的代码中,我想找到已解析的符号,查看已知的引用,以及未解析的符号。

例如,我有一个包含此类的dll:

<a ID="lb01" runat="server" href='<%# DataBinder.Eval(Container.DataItem, "Link01")' ><%# DataBinder.Eval(Container.DataItem, "Link01") %> </a>

用户添加此dll作为其脚本的参考。 然后在他的脚本中,用户写道:

public class A {
    public static double Stuff { get; }
}

我想使用Roslyn编译它,并告诉我var x = A.Stuff * MyVariable; return x; x是已知符号而A.Stuff不是,所以我可以从代码中推断出MyVariable是用户输入。

现在我正在这样做:

MyVariable

但我不知道如何使用语义模型中的信息。这在任何地方都没有很好的记录...

1 个答案:

答案 0 :(得分:1)

您可以尝试获取变量声明并进行检查:

var decl = model.GetSymbolInfo(identifier)
                .Symbol
               ?.DeclaringSyntaxReferences
                .FirstOrDefault();