目前我正在为roslyn编写c#的简单代码分析。我需要解析一个解决方案中所有项目的所有文档,并在本文档中获取已声明的使用类。Roslyn在ObjectCreationExpressionSyntax中获取IdentifierName
例如来自:
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
在解决方案中查找所有类的引用。由于我已经需要解析所有文件,它应该没有工作。
也许我走错了路?如何获得标识符值?
好的,该怎么做?你的链接并没有真正帮助我理解这一点。你能解释更多还是使用一些代码? –
希望更新的答案有帮助。 – Tamas
是的,谢谢。也许是一个@Crowcoder发布的更好的解决方案。会弄清楚巫婆会符合我的需要。谢谢! –