2011-05-04 6 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을 숫자로 나타냄) 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

+0

@ 대니얼 : 일부 변경 사항 (내 requirment에 매우 특정)과 함께 작동했습니다. 대단히 감사합니다. 너 락. – Shwetabh

+0

@ Shwetabh : 듣기 좋습니다! 내 제안에서 누락 된 부분, 즉 실제 분석을 공유 하시겠습니까? –

관련 문제