2016-09-30 3 views
1

roslyn을 사용하여 C# 문서를 편집하고 #define 퀴즈를 추가하고 싶습니다.roslyn C# 문서 위에 "#define VAR"을 추가하는 방법

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

시도한 코드가 어떻게 실패 했습니까? 내가 리터를 editor.GetChangedDocument 살았어 때 – svick

+0

는() 그것은 경우 InvalidOperationException 예외 : 지정된 항목이 목록의 요소가 아닙니다. –

답변

2

나는 마침내 그것을 알아 냈 : 나는 다음 그것을

#define X 
namespace MyNameSpace { 
<classes> 
} 

내가 노력하고 싶습니다의이

namespace MyNameSpace { 
<classes> 
} 

을 다음과 내가 가진 가정 해 봅시다 예를 들어

:

// 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

사실, 이것은 상당히 좋습니다. 나는 동의합니다. –