尝试尝试一些Resharper Open API

时间:2011-03-28 13:10:00

标签: resharper

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

   ICSharpFile file = CSharpParserUtil.Parse(sCode);

例外详情: 发生了'System.InvalidOperationException'类型的第一次机会异常 JetBrains.Platform.ReSharper.Shell.dll

线程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);
        }
    }

需要一些关于此问题的帮助。

由于

2 个答案:

答案 0 :(得分: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);
 }

答案 1 :(得分:1)

目前,在没有Visual Stdio的情况下使用ReSharper API是不可能的,就像您在控制台应用程序中的示例一样。 您需要编写R#插件,它将在Visual Studio中加载到R#中。

查看http://resharperpowertoys.codeplex.com/