使用 Roslyn 修改方法体

Modifying body of method with Roslyn

有没有什么方法可以使用 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"。

您可以使用 the AddBodyStatements method to create a new MethodDeclarationSyntax with the statement added and then use ReplaceNode 更新 SyntaxTree:

var newRoot = root.ReplaceNode(myMethod, myMethod.AddBodyStatements(myStatement));

这将创建有效的 C# 代码,但看起来不对,因为缩进严重。可能最简单的解决方法是同时调用 Formatter.Format:

newRoot = Formatter.Format(newRoot, new AdhocWorkspace());