2011-09-23 7 views
0

저는 두 가지 FxCop 규칙을 작성하고 있으며 규칙 중 하나에서 특정 메소드에서 생성자가 호출되도록 강요해야합니다. 이를 위해 실제 테스트를 수행하기 전에 특정 생성자에 대한 호출자 목록을 만들어야합니다. 이것이 어떻게 가능한지? ApplicationDomain에서로드 된 어셈블리 목록을 가져 오기 위해 어떤 종류의 핸들이 있습니까? 클래스를 반복하고 Method 객체를 생성 할 수 있습니까? 이상적인 호출자 목록은 BeforeAnalysis 메서드로 작성되어야합니다.FxCop, 종속 어셈블리의 호출자 목록 구성

답변

0

나는이 질문을 잘 설명하지 못했지만, 당신의 요점을 본다. 3 개의 다른 어셈블리가 있고 한 어셈블리에서 다른 어셈블리로의 특정 메서드 호출에 대해 벤치 마크 생성자가 호출되도록해야합니다. 벤치 마크 클래스는 4 번째 어셈블리에 있습니다. 이제는 VS2010 만 분석을 위해 하나의 대상 어셈블리 만로드하고 CallGraph를 사용하여 생성자를 호출하는 메서드 목록을 만들 때 아무 것도 찾을 수 없었습니다. FxCopCmd.exe를 수동으로 호출 할 때 수동으로/file : 매개 변수를 사용하여 종속 어셈블리를 수동으로 추가 할 수 있습니다.

내 용액 RuleUtilities.AnalysisAssemblies에로드 조립체에 의존하지 (수동 다른 어셈블리를로드하고 BeforeAnalysis 방식에서 발신자 목록 contruct한다. I는 목록 contruct 수있다이 방법

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

호출자, 각 어셈블리 및 벤치 마크 클래스 생성자에 대한. 완벽하게 작동합니다 VS2010

0

Microsoft.FxCop.Sdk.CallGraph.CallersFor (메서드) 메서드는 원하는 것을 제공 할 수 있습니다. 그러나 일반적으로 설명하는 것처럼 보이는 일반적인 방법은 일반적으로 잘못된 대상에 문제를 할당하기 때문에 거의 좋은 아이디어가 아닙니다. 예를 들어, 설명하는 시나리오에서 타겟 contructor 호출을 포함하지 않아야하는 메소드에 문제를 부여하는 것이 바람직 할 것입니다. 그러나 분석 대상이 생성자 인 경우 발견 된 문제는 호출해야 할 메소드가 아니라 생성자에 기인합니다.