是否有某种方法可以在带有Roslyn的.cs文件的方法末尾添加特定语句?
var code = new StreamReader(@"C:\Users\PersonalUser\Documents\Visual Studio 2015\Projects\SampleToAnalyze\SampleToAnalyze\ClassChild.cs").ReadToEnd();
SyntaxTree tree = CSharpSyntaxTree.ParseText(code);
var root = tree.GetRoot();
var compilation = CSharpCompilation.Create("MyCompilation", new[] { tree },
new[] { MetadataReference.CreateFromFile(typeof(object).Assembly.Location) });
var model = compilation.GetSemanticModel(tree);
MethodDeclarationSyntax myMethod= tree.GetRoot().DescendantNodes()
.OfType<MethodDeclarationSyntax>().Last();
StatementSyntax myStatement= SyntaxFactory.ParseStatement(@"Console.WriteLine();");
我想在方法“myMethod”的末尾插入“myStatement”。
答案 0 :(得分:4)
您可以使用the AddBodyStatements
method创建新的MethodDeclarationSyntax
并添加语句,然后使用ReplaceNode
更新SyntaxTree
:
var newRoot = root.ReplaceNode(myMethod, myMethod.AddBodyStatements(myStatement));
这将创建有效的C#代码,但看起来不对,因为它的缩进很糟糕。解决问题的最简单方法可能是调用Formatter.Format
:
newRoot = Formatter.Format(newRoot, new AdhocWorkspace());