2011-09-23 12 views
0

我正在構建一對海關FxCop規則,其中一個規則需要強制執行,以特定方法調用構造函數。爲此,我需要在執行實際測試之前爲該特定構造函數創建一個調用者列表。這怎麼可能?是否有某種類型的句柄來獲取ApplicationDomain中所有已加載程序集的列表,我可以遍歷這些類並查找構造函數Method對象?理想情況下,調用者列表應該由BeforeAnalysis方法組成。FxCop,從相關程序集中編寫調用者列表

回答

0

我想我沒有很好地解釋這個問題,但我明白了你的觀點。 我有3個不同的程序集,對於從一個程序集到另一個程序集的某些方法調用,我需要確保調用基準構造函數。基準班駐留在第四大會。現在我的問題是,只有VS2010只加載一個目標程序集進行分析,當我使用CallGraph構建調用構造器的方法列表時,它找不到任何目標程序集。當手動調用FxCopCmd.exe時,我可以用/ file:參數手動添加相關程序集。

我的解決辦法是手動加載不同的組件(未依託RuleUtilities.AnalysisAssemblies加載組件和contruct在BeforeAnalysis方法呼叫者的列表。

  RuleUtilities.GetAssembly(
      RuleUtilities.AnalysisAssemblies 
      .First().Directory + "\\" + additionalAssemblyFilename) 
      .Types.SelectMany(type => type.Members) 
      .Where(member => member.IsPublic) 
      .Where(CanBeCastedToMethod) 
      .Cast<Method>() 
      .SelectMany(CallGraph.CallersFor); 

通過這種方法,我可以contruct列表的調用者,每個程序集和基準類的構造函數。完美的工作,我VS2010。

0

Microsoft.FxCop.Sdk.CallGraph.CallersFor(Method)方法可能會給你你想要的。然而,你似乎描述的一般方法很少是一個好主意,因爲它通常會將問題分配給錯誤的目標。例如,在您描述的場景中,將問題歸因於應該但不包含目標構造函數調用的方法可能是可取的。但是,如果分析目標是構造函數,則檢測到的問題將歸因於構造函數而不是應該調用它的方法。

相關問題