2011-05-04 87 views
0

我正在開發一個影響分析工具。如果我正在更改myAssembly中的「myMethod」方法,則需要獲取所有其他程序集引用myAssembly,並通過下面的代碼獲取它。其他程序集引用的方法

Assembly a = Assembly.LoadFrom("otherAssembly"); 
//check if the my Assembly is referenced or not? 
if (a.GetReferencedAssemblies().Where(item => item.Name == "myAssembly").LongCount() > 0) 
{ 
    //Do something 
} 

但是,在這裏如何知道「myAssembly」的「myMethod」被調用/使用與否?否則,我將得到所有其他正在引用myAssembly的組件(例如10個),但只有1個被調用/使用myMethod,並且會受到影響。

任何幫助將不勝感激

回答

2

您需要分析這些程序集中的所有代碼。您可以使用Mono.Cecil執行此任務。

一些更多信息:
你想要做的並不是微不足道的。您需要迭代所有可能的可執行代碼並檢查CIL指令並分析它們以查看您的方法是否被調用。
作爲一個起點,你可以得到的所有類似的方法進行操作:

var assemblyResolver = new DefaultAssemblyResolver(); 
assemblyResolver.AddSearchDirectory(...); 
var assemblyDefinition = assemblyResolver.Resolve(
          AssemblyNameReference.Parse(fullName)); 
foreach(ModuleDefinition module in assemblyDefinition) 
{ 
    foreach(TypeDefinition type in module.Types) 
    { 
     foreach(MethodDefinition method in type.Methods) 
     { 
      foreach(Instruction instruction in method.Body.Instructions) 
      { 
       // Analyze it - the hard part ;-) 
      } 
     } 
    } 
} 
+0

@Daniel:非常感謝您的建議。我正在嘗試它,並且很快就會更新它。 – Shwetabh 2011-05-05 04:07:42

+0

@丹尼爾:隨着一些變化(非常具體到我的需求)它的工作。非常感謝。你搖滾。 – Shwetabh 2011-05-05 05:53:32

+0

@Shwetabh:很高興聽到!您是否介意分享我的建議中缺少的部分,即真正的分析? – 2011-05-05 06:30:58

相關問題