2009-07-30 13 views
1

私はポストシャープのためにCompileTimeValidate(MethodBase method)と書こうとしています。問題は、違反が発生したときにエラーリストに説明だけが表示されることです。 'File'列と 'Line'列は空です。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の解析に関する詳細は、使用可能なpremadeコードを参照してください。http://blogs.msdn.com/jmstall/archive/2005/08/25/pdb2xml.aspx –

+0

PostSharpはPDBファイルの読み込みと書き換えを行いますが、ラオスには公開されていません。問題は、PDBファイルにはフィールド、メソッド、タイプなどの場所が含まれていませんが、メソッド内の命令の場所だけが含まれることです。これは、抽象メソッド、型、フィールドなどにはほとんど役に立ちませんが、 –

関連する問題