尝试尝试一些Resharper Open API

Vin*_*zes 1 resharper

我试图读取一个C#源文件并使用Resharper解析它.我想获取文件中使用的命名空间列表,但我在这一行中有一个例外.

   ICSharpFile file = CSharpParserUtil.Parse(sCode);
Run Code Online (Sandbox Code Playgroud)

异常详细信息: JetBrains.Platform.ReSharper.Shell.dll中出现"System.InvalidOperationException"类型的第一次机会异常

线程0x1020已退出,代码为0(0x0).线程0x14c0已退出,代码为0(0x0).

  static void Main()
    {

        String sCode = File.ReadAllText(@"D:\ResharperTries\TestFile.cs");

        try
        {
            ICSharpFile file = CSharpParserUtil.Parse(sCode);
            IList<ICSharpNamespaceDeclaration> x = file.NamespaceDeclarations;

            foreach (ICSharpNamespaceDeclaration value in x)
            {
                Console.WriteLine(value.ContainingNamespace.ShortName);
            }

        }
        catch (Exception e)
        {

            Console.WriteLine(e.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

需要一些关于这个问题的帮助.

谢谢

小智 5

可以使用属于DXCore和CodeRush的解析器来执行此操作.

在10.2版本中,我们为C#和VB(可免费下载的 DXCore的一部分)发布了独立的解析器库,因此引用解析器库将使您可以轻松地完成所需的操作.

如果您需要帮助,只需发送电子邮件至support@devexpress.com即可.

下面是代码示例,可用于在名称空间中填充ListBox,在某些文件中使用:

 string filePath = @"InsertFilePathHere";
 CSharp30Parser parser = new CSharp30Parser();

 SourceFile fileNode = parser.ParseFile(filePath) as SourceFile;
 if (fileNode == null || fileNode.UsingList == null)
   return;
 lbUsedNamespaces.Items.Clear();
 for (int i = 0; i < fileNode.UsingList.Count; i++)
 {
   string strUsing = fileNode.UsingList.GetKey(i) as String;
   if (String.IsNullOrEmpty(strUsing))
     continue;
   lbUsedNamespaces.Items.Add(strUsing);
 }
Run Code Online (Sandbox Code Playgroud)

  • 事实上,DXCore可以从DevExpress @ http://DevExpress.com/dxcore单独购买.此外CodeRush和CodeRush Xpress(由微软赞助的免费版本)应该与我们的竞争对手一起玩得很好.如果您遇到问题,请随时联系支持人员,他们将以任何方式为您提供帮助. (2认同)