2017-07-14 104 views
1

有一种方法可以在roslyn的.cs文件中的方法末尾添加特定语句?修改Roslyn的方法体

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”。我希望你能帮助我。谢谢。

回答

2

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

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

这将创建代码,这是有效的C#,但看起来错误的,因为它是非常缩进。解决这个问题的最简单方法就是致电Formatter.Format

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

它不起作用。当我打开文件时,没有添加的行是 – blinkettaro

+0

确定它有效。我添加了这行File.WriteAllText(file,newRoot.ToFullString());到你的代码。非常感谢! – blinkettaro