2009-07-30 3 views
1

나는 포스트 샤프에 CompileTimeValidate(MethodBase method)을 쓰려고합니다. 문제는 위반이 발생하면 오류 목록에 설명 만 표시합니다. '파일'및 '줄'열은 비어 있습니다.MethodBase는 파일 이름과 줄 번호를 제공합니까?

내가 작업 할 수있는 유일한 정보는 속성이 적용된 메소드의 MethodBase 인스턴스입니다.

MethodBase 개체의 소스 파일과 줄 번호 정보를 가져 오는 방법은 무엇입니까?

public override bool CompileTimeValidate(MethodBase method) 
    { 
     MessageSource.MessageSink.Write(new Message(SeverityType.Error, "CU0001", 
      "MyError", "MyAspectLibrary")); 

     return false; 
    } 

답변

3

아니요. MethodBase는 .Net 어셈블리의 기본 메타 데이터의 일부를 나타냅니다. 파일 및 라인 정보를 포함한 소스 정보는 DLL에 저장되지 않으므로 Reflection API를 통해 사용할 수 없습니다. 파일 및 회선 정보는 실제로 PDB에 저장되므로 토큰과 일치하는 API를 통해 파일/회선 정보를 찾아야합니다.

+0

관리되는 PDB를 구문 분석하는 데 대한 자세한 내용은 다음과 같이 사용할 수있는 미리 코딩 된 코드로 볼 수 있습니다. http://blogs.msdn.com/jmstall/archive/2005/08/25/pdb2xml.aspx –

+0

PostSharp는 PDB 파일을 읽고 다시 작성하지만 라오스에 노출되지는 않습니다. 문제는 PDB 파일에 필드, 메소드, 유형 등의 위치가 포함되지 않지만 메소드 내부의 명령어 위치 만 포함한다는 것입니다. 이것은 추상적 인 메소드, 타입, 필드 등에 대해서는 거의 도움이되지 않지만, –

관련 문제