我可以添加使用罗斯林DocumentEditor一个UsingStatement

问题描述 投票:0回答:1

我的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 ;
}

我所试图做的,是从Document对象获得CompilationUnitSyntax ...

  var Tree      = await RoslynDoc.GetSyntaxTreeAsync() ;
  var Root      = Tree.GetRoot() ;
  var cus       = Root as CompilationUnitSyntax ;

并添加与该的insertBefore使用说明()

  var usingSmnt = UsingStatement ( namespaceName ) ;
  RoslynEditor.InsertBefore ( cus.Members.First(), usingSmnt ) ;

在这一点上,它不产生一个错误,但是当我最后调用GetChangedDocument()方法的DocumentEditor,它导致一个InvalidCastException(不能投UsingDirectiveSyntax到MemberDeclarationSyntax)

我知道,我可以用AddUsings()方法中添加UsingDirectiveSyntax到CompilationUnitSyntax,但我宁愿通过DocumentEditor对象,使所有的变化,如果这是可能的。

visual-studio roslyn
1个回答
1
投票

你不能UsingDirectiveSyntax类型添加到MemberDeclarationSyntax类型的列表

改变插入语句这一点,它的工作:

RoslynEditor.InsertBefore(compilationUnit.Usings.First(), usingSmnt);
© www.soinside.com 2019 - 2024. All rights reserved.