我正在使用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
但我不知道如何使用语义模型中的信息。这在任何地方都没有很好的记录...
答案 0 :(得分:1)
您可以尝试获取变量声明并进行检查:
var decl = model.GetSymbolInfo(identifier)
.Symbol
?.DeclaringSyntaxReferences
.FirstOrDefault();