Моему расширению Visual Studio необходимо выполнить несколько обновлений файла исходного кода.Рекомендуется использовать класс DocumentEditor (Microsoft.CodeAnalysis.Editing.DocumentEditor).
Одним из изменений может быть вставка оператора using.
Я могу сгенерироватьUsingStatementSyntax со следующим кодом:
public UsingDirectiveSyntax UsingStatement ( string namespaceName )
{
var qualifiedName = SyntaxFactory.ParseName ( namespaceName ) ;
var usingSmnt = SyntaxFactory.UsingDirective ( qualifiedName ) ;
return usingSmnt ;
}
То, что я пытался сделать, это получить CompilationUnitSyntax из объекта Document ...
var Tree = await RoslynDoc.GetSyntaxTreeAsync() ;
var Root = Tree.GetRoot() ;
var cus = Root as CompilationUnitSyntax ;
и добавить инструкцию Usingс InsertBefore ()
var usingSmnt = UsingStatement ( namespaceName ) ;
RoslynEditor.InsertBefore ( cus.Members.First(), usingSmnt ) ;
На этом этапе он не генерирует ошибку, но когда я наконец вызываю метод GetChangedDocument () для DocumentEditor,это приводит к InvalidCastException (не может привести UsingDirectiveSyntax к MemberDeclarationSyntax)
Я знаю, что могу добавить UsingDirectiveSyntax к CompilationUnitSyntax с помощью метода AddUsings () , но я бы предпочел внести все изменениячерез объект DocumentEditor, если это возможно.