2017-07-14 107 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