2016-09-30 20 views
1

roslynを使用してC#文書を編集して、その上に#defineトリビアを追加したいとします。例えばroslyn C#文書の上に「#define VAR」を追加する方法

だが、私はそれ

#define X 
namespace MyNameSpace { 
<classes> 
} 

したいのですが

namespace MyNameSpace { 
<classes> 
} 

を以下しているとしましょう、私は次のことを試してみました:

DocumentEditor editor = <get document editor> 
var compilationUnit = SyntaxFactory.ParseCompilationUnit("#defin X"); 
       var defineXTrivia = compilationUnit.GetFirstDirective(); 
       editor.InsertBefore(editor.OriginalRoot, defineXTrivia); 
+2

ここに行けばhttp://roslynquoter.azurewebsites.net/に '#define VAR'と入力して大きなボタンを押します。それはあなたを助けるはずです。 – DavidG

+0

試したコードはどのように失敗しましたか?私は L editor.GetChangedDocument() をCAL場合 – svick

+0

は 例外InvalidOperationExceptionをスロー:指定された項目は、リストの要素ではありません。 –

答えて

2

私はついにそれを考え出しました:

// Create '#define X' trivia 
var defineXDirective = SyntaxFactory.Trivia(SyntaxFactory.DefineDirectiveTrivia("X", isActive : true).NormalizeWhitespace()); 

// Insert '#define X' trivia on top of the document 
var changedRoot = editor.OriginalRoot.WithLeadingTrivia(
        editor.OriginalRoot.GetLeadingTrivia().InsertRange(0, defineXDirective)); 
editor.ReplaceNode(editor.OriginalRoot, changedRoot); 
+1

これは動作しますが、これは簡単ではありません、defineXDirectiveの作成のために? var defineXDirective = SyntaxFactory.Trivia(SyntaxFactory.DefineDirectiveTrivia( "X"、isActive:true).NormalizeWhitespace()); – Ties

+1

確かに、これはかなり良いです、私は同意します。 –

関連する問題