Roslyn을 사용하여 소스 코드를 수정하는 방법은 무엇입니까? SyntaxNode를 만들고 SyntaxTree에 삽입 할 수 없습니다. 또는 대안 (Antrl, NRefactory 또는 다른 것)을 사용 하시겠습니까?Roslyn을 사용하여 소스 코드를 수정하는 방법은 무엇입니까?
답변
SyntaxFactory
을 사용하여 SyntaxNode
을 만들 수 있습니다.
기존 구문 트리를 수정할 수 없으므로 (변경 불가능하기 때문에) 노드를 포함하는 새로운 구문 트리를 만들 수 있습니다. With-
및 Add-
메서드는 ReplaceNode
및 CSharpSyntaxVisitor
입니다. 이 중 어느 것이 당신의 필요를 가장 잘 충족시키는 지 말하기는 어렵습니다.
svick이 어떻게 대답했는지 - 기존 구문 트리를 수정할 수 없습니다. Sytnax 트리는 변경 불가능하지만 기존에 기반한 다른 트리를 작성할 수 있습니다. 이 목적을 위해 노드를 생성하고 기존 노드를 교체해야합니다. 당신이 간단한 예 (사용 변경)하실 수 있습니다 :
로슬린의 API의 기본적인 신조는 불변이다 : 여기 불변의 경우
var name = Syntax.QualifiedName(Syntax.IdentifierName("System"), Syntax.IdentifierName("Collections")); name = Syntax.QualifiedName(name, Syntax.IdentifierName("Generic")); SyntaxTree tree = SyntaxTree.ParseText( @"using System; using System.Collections; using System.Linq; using System.Text; namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine(""Hello, World!""); } } }"); var root = (CompilationUnitSyntax)tree.GetRoot(); var oldUsing = root.Usings[1]; var newUsing = oldUsing.WithName(name); root = root.ReplaceNode(oldUsing, newUsing); Console.WriteLine(root.GetText());
은 시작하기 문서에서 메모입니다. 불변의 데이터 구조는 작성 후에 변경 될 수 없기 때문에, 한 도구의 위험이 다른 도구에 예기치 않은 방식으로 영향을 미치지 않으면 서 여러 소비자가 안전하게 공유하고 분석 할 수 있습니다. 잠금 또는 다른 동시성 측정이 필요하지 않습니다. 이것은 Roslyn API의 구문 트리, 편집, 기호, 의미 모델 및 기타 모든 데이터 구조에 적용됩니다. 수정 대신 새 오브젝트는 이전 오브젝트와 지정된 차이를 기반으로 작성됩니다. 이 개념을 구문 트리에 적용하여 트리 변환을 만듭니다!
이 코드에서는'using Syntax = Microsoft.CodeAnalysis.CSharp.SyntaxFactory; '와 같이 using 문을 사용해야한다고 가정합니다. – Anssssss
- 1. JDT를 사용하여 소스 코드를 수정하는 방법은 무엇입니까?
- 2. openCV 소스 코드를 수정하는 방법은 무엇입니까?
- 3. Roslyn을 사용하여 소스 코드의 일부에서 배경색을 변경하십시오.
- 4. 작성한 후 앱의 소스 코드를 수정하는 방법은 무엇입니까? xCode-Sparkle
- 5. Magento에서 Abstract 클래스의 코드를 수정하는 방법은 무엇입니까?
- 6. Roslyn을 사용하여 단일 .cs 파일에서 솔루션을 만드는 방법은 무엇입니까?
- 7. Roslyn을 사용하여 컨트롤러를 동적으로 컴파일하기
- 8. roslyn을 사용하여 문장 바꾸기
- 9. 소스 코드없이 vb 앱을 수정하는 방법은 무엇입니까?
- 10. 소스 코드를 보호하는 방법은 무엇입니까?
- 11. 다른 버전의 소스 코드를 처리하는 방법은 무엇입니까?
- 12. 컴파일하고 안드로이드 4.0.3 소스 코드를 수정하는 방법
- 13. Visual C#에서 코드를 수정하는 방법은 무엇입니까?
- 14. Roslyn을 사용하여 지시어를 사용하여 클래스를 업데이트하려면 어떻게해야합니까?
- 15. Roslyn을 사용하여 "invocations"속성 찾기
- 16. Websocket Handshake 코드를 수정하는 방법은 무엇입니까?
- 17. 피연산자가 잘못되었습니다.이 짧은 코드를 수정하는 방법은 무엇입니까?
- 18. 자바에서이 반사 코드를 수정하는 방법은 무엇입니까?
- 19. 이것을 아름답게 수정하고 코드를 수정하는 방법은 무엇입니까?
- 20. Eclipse에서 LLVM 소스 코드를 작성하는 방법은 무엇입니까?
- 21. numpy.random.exponential의 소스 코드를 보는 방법은 무엇입니까?
- 22. roslyn을 사용하여 메서드에 매개 변수를 추가하는 방법은 무엇입니까?
- 23. Roslyn을 사용하여 CSharp 프로젝트에 타사 DLL을 추가하는 방법은 무엇입니까?
- 24. PHP 스크립트의 소스 코드를 숨기는 방법은 무엇입니까?
- 25. "developer.android.com"사이트의 소스 코드를 얻는 방법은 무엇입니까?
- 26. Net Beans에서 initComponents() 메소드의 코드를 수정하는 방법은 무엇입니까?
- 27. jQuery로 HTML 소스 코드를 얻는 방법은 무엇입니까?
- 28. JRex를 사용하여 페이지 소스 코드를 얻는 방법?
- 29. CasperJS를 사용하여 소스 코드를 로컬 파일로 덤프
- 30. OS X에서 svn을 사용하여 소스 코드를 다운로드하는 방법은 무엇입니까?
답변 해 주셔서 감사합니다. NodeOrTokenList를 찾았습니다. NodeOrTokenList를 SyntaxNode로 어떻게 캐스트합니까? – user3382135
@ user3382135 당신은 그렇게하지 않으려 고하고 왜 그렇게하고 싶지는 모르겠다. 나는 당신이 무엇을하고 싶은지 설명하고 왜 NodeOrTokenList가 필요하다고 생각하는지에 대해 새로운 질문을해야한다고 생각합니다. – svick