2011-03-28 47 views
1

我試圖讀取一個C#源文件並使用Resharper解析它。我想獲取文件中使用的名稱空間列表,但我在這一行中有一個例外。嘗試使用一些Resharper開放API

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

需要一些關於這個問題的幫助。

感謝

回答

5

這是可能的是DXCore和的CodeRush的一部分解析器來做到這一點。

在10.2版本中,我們發佈了獨立的解析器庫爲C#和VB(在免費下載 DXCore的一部分),所以引用的解析器庫將使它很容易做到,你在找什麼。

如果您需要幫助,只需發送電子郵件[email protected]提出任何問題。

下面是代碼示例,可用於填充命名空間的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); 
} 
+0

謝謝Alex和Rory的回覆...... Resharper已經在我的團隊中使用過了,我們希望有一些附加組件,所以我們想在Reshaper本身中採用一種解決方法......是否可以使用DXCore庫resharper(不使用CodeRush)在這種情況下? – 2011-04-01 08:14:40

+2

事實上,DXCore可以從DevExpress @ http://DevExpress.com/dxcore單獨購買。另外,CodeRush和CodeRush Xpress(由微軟贊助的免費版本)應該與我們的競爭對手打好關係。如果遇到問題,請隨時與支持部門聯繫,他們將以任何可能的方式爲您提供幫助。 – 2011-04-01 09:53:29

+0

謝謝Rory,這對我來說確實是一個很好的信息......我會嘗試在我的項目中使用DXCore。 – 2011-04-01 11:15:17

1

目前,它不可能使用ReSharper的API沒有Visual STDIO在與控制檯應用程序的例子。 您需要編寫R#插件,並將其加載到Visual Studio中的R#中。

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

+0

感謝Derigel..I是使用Visual Studio作爲編輯器,但我想要得到的基本通過解析一個簡單的C#文件瞭解R#Open API的工作原理。我們可以使用一些服務或任何其他方法來使用R#而無需創建插件?作爲理解內置函數的最簡單方法是將其打印在控制檯中。如果不能,請您以這種簡單的方式爲我提供一些其他測試方法。 – 2011-03-29 07:54:22

+0

不,目前幾乎沒有服務沒有VS. 在R#6中,我們計劃發佈一些我們用於單元測試的測試框架。它包含模擬對象來模擬VS環境。 – derigel 2011-03-29 14:30:40