1

私のプロジェクトでは、通常の ASP.NET コントロールの代わりにカスタム コントロールを使用しています。.NET 上にアーキテクチャを構築し、そのコントロールを使用しています。

ここで、一部の Windows コントロールが使用されているかどうかを確認するカスタム ルールを作成する必要があります。理由は、私のチームは、Windows コントロールを置き換えるように設計されたカスタム コントロールのみに制限する必要があるからです。

例: 検索する必要があり、System.Windows.Controls.Textbox を使用している場合は、エラーにする必要があります。

誰でもコードで私を助けてもらえますか?

問題が明確であることを願っています.....さらに説明が必要な場合はお知らせください。

4

2 に答える 2

0

ツールNDependを使用すると、FxCopを使用するよりもはるかに簡単に.NETコードにカスタムコードルールを記述できます。免責事項:私はツールの開発者の一人です

このツールを使用すると、LINQクエリ(CQLinqという名前)に対してカスタムコードルールを記述できます。たとえば、要求しているクエリは、CQLinqを使用して次のように記述できます。

// <Name>Don't use system controls</Name>
warnif count > 0

let systemControls = ThirdParty.Types.Where(
          t => t.DeriveFrom("System.Windows.Forms.Control".AllowNoMatch()))
where systemControls.Count() > 0

from t in systemControls 
let methodsThatCreateT = t.TypesUsingMe.ChildMethods().Where(m => m.CreateA(t))
select new { t, methodsThatCreateT }

このようなコードルールを編集している間、すぐに閲覧可能な結果が表示されます(ここでは3ミリ秒)。この結果の任意のタイプまたはメソッドをダブルクリックすると、VisualStudioのソースコードでの宣言にジャンプします。

CQLinqはシステムコントロールを使用しません

200のデフォルトコードルールが提案されています。このツールは、Visual Studio 2012、2010、および2008に100%統合されています。デフォルトまたはカスタムコードルールは、Visual Studio内で、またはビルドプロセス時に生成されたHTML+javascriptレポートで検証できます。

于 2012-07-21T21:54:34.133 に答える
0

この種のルールのロジックは非常に単純です。

  1. メソッド本体を確認し、各コンストラクター呼び出しにアクセスして、ターゲット クラスが基本 Control クラスから継承されているかどうかを確認します。
  2. 存在する場合は、ターゲット クラスが名前空間またはアセンブリにあることを確認します (または、それを「自分のもの」として最もよく識別できます)。

これは比較的単純です。はるかに大きな問題は、関連するコンストラクターが通常、デザイナーが生成したコードで呼び出されることです。ほとんどの人は、FxCop を実行するときに無視することを好む傾向があります。ルールを機能させるには、デザイナーが生成したコードを分析に含める必要があります。

于 2012-07-20T14:43:49.220 に答える