【发布时间】:2017-10-03 22:11:49
【问题描述】:
目前我正在使用 roslyn 为 c# 进行简单的代码分析。我需要在一个解决方案中解析所有项目的所有文档,并在该文档中获取声明的使用类。
例如来自:
class Program
{
static void Main(string[] args)
{
var foo = new Foo();
}
}
我想得到Program 使用Foo。
我已经解析了所有文档并获得了里面声明的类。
// all projects in solution
foreach (var project in _solution.Projects)
{
// all documents inside project
foreach (var document in project.Documents)
{
var syntaxRoot = await document.GetSyntaxRootAsync();
var model = await document.GetSemanticModelAsync();
var classes = syntaxRoot.DescendantNodes().OfType<ClassDeclarationSyntax>();
// all classes inside document
foreach (var classDeclarationSyntax in classes)
{
var symbol = model.GetDeclaredSymbol(classDeclarationSyntax);
var objectCreationExpressionSyntaxs = classDeclarationSyntax.DescendantNodes().OfType<ObjectCreationExpressionSyntax>();
// all object creations inside document
foreach (var objectCreationExpressionSyntax in objectCreationExpressionSyntaxs)
{
// TODO: Get the identifier value
}
}
}
}
问题是要获取 IdentifierName Foo。使用debugger,我看到objectCreationExpressionSyntax.Type得到了Identifier.Text得到了我需要的值,但objectCreationExpressionSyntax.Type.Identifier似乎是私有的。
我可以使用SymbolFinder 在解决方案中查找类的所有引用。因为我已经需要解析所有文档,所以它应该可以不用。
也许我走错了路?如何获取标识符值?
【问题讨论】:
标签: c# roslyn roslyn-code-analysis