C# 使用Roslyn修改方法体

C# 使用Roslyn修改方法体,c#,syntax,roslyn,C#,Syntax,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.

有没有办法在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();");
var code=new StreamReader(@“C:\Users\PersonalUser\Documents\Visual Studio 2015\Projects\SampleToAnalyze\SampleToAnalyze\ClassChild.cs”).ReadToEnd();
SyntaxTree-tree=CSharpSyntaxTree.ParseText(代码);
var root=tree.GetRoot();
var compilation=csharpcomilation.Create(“MyCompilation”,new[]{tree},
新[]{MetadataReference.CreateFromFile(typeof(object.Assembly.Location)});
var model=compilation.GetSemanticModel(树);
MethodDeclarationSyntax myMethod=tree.GetRoot().DegenantNodes()
.OfType().Last();
StatementSyntax myStatement=SyntaxFactory.ParseStatement(@“Console.WriteLine();”);
我想在方法“myMethod”的末尾插入“myStatement”。

您可以使用添加的语句创建一个新的
MethodDeclarationSyntax
,然后使用更新
SyntaxTree

var newRoot = root.ReplaceNode(myMethod, myMethod.AddBodyStatements(myStatement));
这将创建有效的C#代码,但看起来是错误的,因为它的缩进严重。可能最简单的解决方法是调用
格式化程序。格式化

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

它不起作用。当我打开文件时,没有我添加的行,它可以工作。我添加了这行文件.WriteAllText(文件,newRoot.ToFullString());到您的代码。非常感谢你!