2014-02-06 52 views
0

我想寫一個自定義規則(代碼分析)其中,如果方法的主體包含空語句,則會引發錯誤。獲取方法體c#

但是,有一個問題。我似乎無法弄清楚如何獲得方法的正文(方法中的文本)。

如何獲取方法內的文本並將其分配給字符串?

在此先感謝。

僅供參考;我在visual studio中使用c#,用FxCop來制定規則。

編輯:添加了一些代碼供參考,這是行不通的。

using Microsoft.FxCop.Sdk; 
using Microsoft.VisualStudio.CodeAnalysis.Extensibility; 


public override ProblemCollection Check(Member member) 
     { 
      Method method = member as Method; 
      if (method == null) 
      { 
       return null; 
      } 

      if (method.Name.Name.Contains("{}")) 
      { 
       var resolution = GetResolution(member.Name.Name); 
       var problem = new Problem(resolution, method) 
            { 
             Certainty = 100, 
             FixCategory = FixCategories.Breaking, 
             MessageLevel = MessageLevel.Warning 
            }; 
       Problems.Add(problem); 
      } 

      return Problems; 
     } 
+1

您是否試圖自己找到解決方案?你可能會顯示你使用的代碼作爲一些上下文嗎? – TheGeekZn

+0

你走了。正如你所看到的,我已經嘗試了Contains函數來進行比較;但如果我能得到一個字符串中的文本,然後比較也將是了不起的。無論解決方案是什麼。 – Matthijs

+0

你可以直接將'member'作爲'method'嗎?不知道類,我會假設'method.Name.Name.ToString()。Contains(「{}」)'可能會有所幫助。 – TheGeekZn

回答

2

FxCop不分析源代碼,它適用於使用任何語言構建的.Net程序集。

您可以找到方法是否包含語句或不使用的FxCop,我建議你閱讀文檔並檢查現有規則的執行去了解它。

其他代碼中間的空語句可能會被編譯器移除,它使用的FxCop您可能無法找到。如果你想分析源代碼,你應該看看StyleCop。

1

然而,有一個問題。我似乎無法弄清楚如何獲得方法 (該方法中的文本)的正文。

你不能。 FxCop不能基於源工作,但分析編譯的字節碼。

你可以做的是找到源頭 - 這是不完全微不足道的 - 但你有沒有FxCop的API這樣做。起點可能是分析pdb文件(不知道在哪裏可以找到文檔),因爲它們可以指向包含該方法的文件。

+0

有沒有其他方法可以實現我想要的?是要制定一個規則,將文本與我提供的文本進行比較:{}? – Matthijs

+0

再說一遍:FxCop不能與源代碼一起使用,但是使用字節代碼。它在生成的程序集上被稱爲AFTER編譯。因此,運行時無法輕鬆訪問源代碼,而且它從來沒有計劃過,所以FxCope的語言是中性的。它根本不檢查來源。 – TomTom