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

C# 使用Roslyn,如何检查类是否来自本地项目,而不是BCL或Nuget(等等)?,c#,roslyn,roslyn-code-analysis,C#,Roslyn,Roslyn Code Analysis,我想写一个Roslyn代码分析器;需要确定ObjectCreationExpression是否正在从本地类(当前项目或当前解决方案中的项目)创建对象;或者如果类来自其他地方,比如基类库或Nuget包等 如何判断Roslyn中的类来自何处?只有在语义模型的帮助下才能知道。您可以通过以下方式获取构造函数的符号,并检查类型来自何处,例如: 只有在语义模型的帮助下才能实现这一点。您可以通过以下方式获取构造函数的符号,并检查类型来自何处,例如: // ObjectCreationExpression no

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


如何判断Roslyn中的类来自何处?

只有在语义模型的帮助下才能知道。您可以通过以下方式获取构造函数的符号,并检查类型来自何处,例如:


只有在语义模型的帮助下才能实现这一点。您可以通过以下方式获取构造函数的符号,并检查类型来自何处,例如:

// 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