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

あなたは追加文で新しいMethodDeclarationSyntaxを作成してSyntaxTreeを更新するために、ReplaceNodeを使用するthe AddBodyStatements methodを使用することができます。

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

関連する問題