我想在沒有預先存在的語法節點的情況下使用Roslyn API生成語法節點。也就是說,我不能簡單地在現有對象上使用WithXYZ()方法來修改它,因爲沒有現有的對象。如何從頭開始在Roslyn中創建語法節點?
例如,我想生成一個InvocationExpressionSyntax對象。假設一個構造函數可用,我可以做類似
var invoke = new InvocationExpressionSyntax(expression, arguments);
但InvocationExpressionSyntax
構造似乎沒有公開。
http://www.philjhale.com/2012/10/getting-started-with-roslyn.html
這個博客建議我可以用這樣的API爲
Syntax.InvocationExpression()
,但我看不出有什麼Syntax
指的是,我沒有看到任何類似它在Roslyn API。
我發現Microsoft.CodeAnalysis.VisualBasic.SyntaxFactory,讓我做
var invoke = SyntaxFactory.InvocationExpression().WithExpression(expression);
而這個作品不夠好,我。任何人想知道的還有Microsoft.CodeAnalysis.CSharp.SyntaxFactory
。
是SyntaxFactory
創建新語法節點的正確方法?
我找到SyntaxFactory.InvocationExpression的方式是通過查看src/Compilers/VisualBasic/Portable目錄下roslyn源代碼(https://github.com/dotnet/roslyn)中的PublicAPI.txt文件。否則,我不知道SyntaxFactory
在哪裏記錄。