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

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

我如何判断Roslyn的课程来自哪里?

你只能在语义模型的帮助下得到它。 您可以通过Locations或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