カスタムFxCopルールを使用して特定のメソッド(MessageBox.Show)への呼び出しを拒否したいとします。私は、FxCopルールをカスタム実装(XMLファイル、BaseIntrospectionRuleなどを継承したもの)する方法の仕組みを知っています。私の質問は、ここで私が "Check"メソッドに入れたものです。以下はカスタムルールを使用してFxCopの特定のメソッドへの呼び出しを検出する方法 - チェックメソッド
は、私は、ウェブ上で多くのチャンスをうかがっに基づいている最初のドラフトですが、私は私が実際にの付いた二つのフィールドに移入なるのかに関しては非常に困惑してい?????以下。
私は、このソリューションでさえ、存在するとしても機能するかどうかはわかりません。 MessageBox.Showへのすべての呼び出しをキャッチしていることを、私が欲しいことをしていることを確認するための偽の証拠は何ですか?
public override ProblemCollection Check(Member member)
{
Method method = member as Method;
if (method == null)
{
return null;
}
MetadataCollection<Instruction>.Enumerator enumerator = method.Instructions.GetEnumerator();
while (enumerator.MoveNext())
{
Instruction current = enumerator.Current;
switch (current.OpCode)
{
case OpCode.Call:
case OpCode.Callvirt:
{
Method method3 = current.Value as Method;
if (method3 == **?????**)
{
Problem item = new Problem(base.GetResolution(**?????**), current);
base.Problems.Add(item);
}
break;
}
}
}
return base.Problems;
}
この手順は、FxCopルールを書くための「古い方法」です。代わりに訪問メソッドを使用する方が簡単です。私が書いたカスタムルールでは、string.ToString(他のものの中でも)の呼び出しを参照してください。https://fxcopcontrib.codeplex.com/SourceControl/changeset/view/7476#37972 – jessehouwing
カスタムルールに関するベストチュートリアルここにあります:http://www.binarycoder.net/fxcop/index.html – jessehouwing