【问题标题】:roslyn How to add "#define VAR" on top of C# documentroslyn 如何在 C# 文档顶部添加“#define VAR”
【发布时间】:2016-10-03 14:26:25
【问题描述】:

我想使用 roslyn 编辑 C# 文档,并在其顶部添加 #define trivia。

例如,假设我有以下内容

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);

【问题讨论】:

  • 转到此处roslynquoter.azurewebsites.net 输入#define VAR 并按下大按钮。这应该对你有帮助。
  • 您尝试的代码是如何失败的?
  • 当我调用 editor.GetChangedDocument() 时会抛出 InvalidOperationException: The item specified is not the element of a list.

标签: c# edit document roslyn


【解决方案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);

【讨论】:

  • 虽然可行,但是对于defineXDirective的创建不是更简单吗? var defineXDirective = SyntaxFactory.Trivia(SyntaxFactory.DefineDirectiveTrivia("X", isActive: true).NormalizeWhitespace());
  • 确实,这样更好,我同意。
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多