DateTime.Nowの使用をチェックするFxCopルールを作成しました。これは、実際にDateTime.Nowを呼び出すコード行ではなく、メソッドの開始点として問題の行番号を報告する点を除いて、うまく機能します。 FxCopレポートで正しい行番号を取得するには、何が必要ですか。ここに私のコードです:正しい行番号を持つFxCop Pro blem()オブジェクトを作成する方法
public override void VisitMemberBinding(MemberBinding memberBinding)
{
string name = memberBinding.BoundMember.FullName;
if (name == "System.DateTime.get_Now")
{
Problems.Add(new Problem(GetResolution(), memberBinding.BoundMember.SourceContext));
}
base.VisitMemberBinding(memberBinding);
}
私が試したmemberBinding.SourceContextとmemberBinding.BoundMember.SourceContextとの両方は、メソッドの開始行番号を返します。
私はSourceContextを使用することができました(開始|終了)LineNumber?私はちょうど正しいオブジェクトを使用していないと思われます。ソースコンテキスト
ありがとう、ありがとう!だからVisitMemeberBindingはDateTime.Nowプロパティの内部で発生し、VisitMethodCallはDateTime.Nowが呼び出されたときに発生しますか?それとも別の方法ですか? – slolife
VisitMemberBindingは、実際にVisitMethodCallベースによって呼び出されます。ただし、メソッド呼び出しには、ソースコンテキストがPDBファイルで追跡される命令なので、利用可能な追加のメタデータがあります。私はFxCopチームが、なぜ信頼できない場合も考えられないので、呼び出されたメソッドのメンバーバインディングにそのソースコンテキストを転送することを選択しなかったのかどうかはよく分かりません。どちらにしても、そこにはないので、使用することはできません。 –