Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 我可以使用Roslyn文档编辑器添加UsingStatement吗_Visual Studio_Roslyn - Fatal编程技术网

Visual studio 我可以使用Roslyn文档编辑器添加UsingStatement吗

Visual studio 我可以使用Roslyn文档编辑器添加UsingStatement吗,visual-studio,roslyn,Visual Studio,Roslyn,我的Visual Studio扩展需要对源代码文件进行多次更新。使用DocumentEditor(Microsoft.CodeAnalysis.Editing.DocumentEditor)类似乎是推荐的方法 更改之一可能是插入using语句 我可以使用以下代码生成UsingStatementSyntax: public UsingDirectiveSyntax UsingStatement ( string namespaceName ) { var qualifiedName = Sy

我的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对象获取CompliationUnitSyntax

  var Tree      = await RoslynDoc.GetSyntaxTreeAsync() ;
  var Root      = Tree.GetRoot() ;
  var cus       = Root as CompilationUnitSyntax ;
并使用InsertBefore()添加Using语句

此时,它不会生成错误,但当我最终在DocumentEditor上调用GetChangedDocument()方法时,它会导致InvalidCastException(无法使用DirectiveSyntax强制转换为MemberDeclarationSyntax)


我知道我可以使用AddUsings()方法将UsingDirectiveSyntax添加到CompilationUnitSyntax,但如果可能,我更愿意通过DocumentEditor对象进行所有更改。

您不能将
UsingDirectiveSyntax
类型添加到
MemberDeclarationSyntax
类型的列表中

将insert语句更改为此,它将工作:

RoslynEditor.InsertBefore(compilationUnit.Usings.First(), usingSmnt);

你好,杜迪,谢谢你的回答,通常效果很好。但是,如果Usings列表为空,则会失败。如果列表是空的,我该怎么办?我也在做一些需要使用语句添加的事情,我遇到了同样的问题,如果没有,它就会失败。我设法找到了一个适用于这两种情况的解决方案:
var updatedcomilationunit=compilationUnit.AddUsings(usingStatement);ReplaceNode(compileUnit,updatedCompileUnit)希望这有帮助!
RoslynEditor.InsertBefore(compilationUnit.Usings.First(), usingSmnt);