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

Dar*_*mas 1 c# roslyn roslyn-code-analysis

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

我怎么知道罗斯琳上课的来源?

m0s*_*0sa 5

你只能在语义模型的帮助下得到它.您可以通过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
Run Code Online (Sandbox Code Playgroud)