Попытка экспериментировать с некоторыми API-интерфейсами Resharper Open - PullRequest
1 голос
/ 28 марта 2011

Я пытался прочитать исходный файл 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 ]

5 голосов
/ 30 марта 2011

Это можно сделать с помощью синтаксических анализаторов, которые являются частью 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 голос
/ 29 марта 2011

В настоящее время невозможно использовать ReSharper API без Visual Stdio, как в вашем примере с консольным приложением.Вам нужно написать плагин R #, и он будет загружен в R # в Visual Studio.

Взгляните на http://resharperpowertoys.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...