roslyn Как добавить "#define VAR" поверх документа C#

Я хотел бы отредактировать документ C# с помощью Roslyn, добавив к нему пустяки #define.

Например, допустим, у меня есть следующее

namespace MyNameSpace {
 <classes>
}

Я хотел бы сделать это

#define X
namespace MyNameSpace {
 <classes>
}

Я попробовал следующее:

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

1 ответ

Решение

Я наконец-то понял:

// 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);
Другие вопросы по тегам