目前我正在爲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發佈的更好的解決方案。會弄清楚巫婆會符合我的需要。謝謝! –