我想写一个Roslyn代码分析器;如果ObjectCreationExpression
正在从本地类(当前项目或当前解决方案中的项目)创建对象,则需要解决这个问题;或者如果该类来自其他地方,如基类库或Nuget包等。
如何判断Roslyn中课程的来源?
答案 0 :(得分:5)
你只能在语义模型的帮助下得到它。您可以通过Locations or DeclaringSyntaxReferences获取构造函数的符号以及类型来源的检查,例如:
// ObjectCreationExpression node == ...;
// SemanticModel model = ...;
var symbol = model.GetSymbolInfo(node).Symbol; // the constructor symbol
var type = symbol.ContainingType; // the class symbol
var isFromSource = type.DeclaringSyntaxReferences.Length > 0