使用 Roslyn,如何检查 class 是否来自本地项目,而不是 BCL 或 Nuget(等)?
Using Roslyn, how to check if class comes from a local project, not the BCL or Nuget (etc)?
我想写一个 Roslyn 代码分析器;如果 ObjectCreationExpression
正在从本地 class 创建对象(在当前项目或当前解决方案中的项目中),则需要确定;或者如果 class 来自其他地方,例如基础 Class 库或 Nuget 包等
如何辨别 class 来自 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
我想写一个 Roslyn 代码分析器;如果 ObjectCreationExpression
正在从本地 class 创建对象(在当前项目或当前解决方案中的项目中),则需要确定;或者如果 class 来自其他地方,例如基础 Class 库或 Nuget 包等
如何辨别 class 来自 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