使用Roslyn,如何检查类是来自本地项目,而不是BCL或Nuget(等)?

时间:2016-08-29 07:32:51

标签: c# roslyn roslyn-code-analysis

我想写一个Roslyn代码分析器;如果ObjectCreationExpression正在从本地类(当前项目或当前解决方案中的项目)创建对象,则需要解决这个问题;或者如果该类来自其他地方,如基类库或Nuget包等。

如何判断Roslyn中课程的来源?

1 个答案:

答案 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