マネージ コードの "拡張正確性規則" 規則セット
"Microsoft 拡張正確性規則" 規則セットでは、コード分析によって報告される論理エラーやフレームワーク使用エラーの検出範囲が最大化されます。COM 相互運用機能やモバイル アプリケーションなど、特定のシナリオに重点が置かれています。これらのシナリオのいずれかに該当するプロジェクトがある場合や、プロジェクト内の問題をさらに細かく探す必要がある場合には、この規則セットの使用を検討してください。
"Microsoft 拡張正確性規則" 規則セットには、"Microsoft 基本正確性規則" 規則セット内の規則が含まれます。基本正確性規則には、"Microsoft 最小推奨規則" 規則セット内の規則が含まれます。詳細については、「マネージ コードの "基本正確性規則" 規則セット」および「マネージ コードの "マネージ推奨規則" 規則セット」を参照してください。
"Microsoft 拡張正確性規則" 規則セット内のすべての規則について、以下の表で説明します。
規則 |
説明 |
---|---|
破棄可能なフィールドを所有する型は、破棄可能でなければなりません |
|
イベント ハンドラーを正しく宣言します |
|
アセンブリに AssemblyVersionAttribute を設定します |
|
インターフェイス メソッドは、子型によって呼び出し可能でなければなりません |
|
ネイティブ リソースを所有する型は、破棄可能でなければなりません |
|
P/Invoke を NativeMethods クラスに移動します |
|
基底クラス メソッドを非表示にしません |
|
IDisposable を正しく実装します |
|
予期しない場所に例外を発生させません |
|
重複するアクセラレータを使用しません |
|
P/Invoke エントリ ポイントは存在しなければなりません |
|
P/Invoke は参照可能であることはできません |
|
Auto 配置の型を COM 参照可能にすることはできません |
|
P/Invoke の直後に GetLastError を呼び出します |
|
COM 参照可能な型の基本型は COM 参照可能でなければなりません |
|
COM 登録メソッドは一致しなければなりません |
|
P/Invoke を正しく宣言します |
|
空のファイナライザーを削除します |
|
値型フィールドはポータブルでなければなりません |
|
P/Invoke 宣言はポータブルでなければなりません |
|
弱い ID を伴うオブジェクト上でロックしません |
|
SQL クエリのセキュリティ脆弱性を確認 |
|
P/Invoke 文字列引数に対してマーシャリングを指定します |
|
値型での宣言セキュリティを確認します |
|
ポインターは参照可能にすることはできません |
|
セキュリティで保護された型はフィールドを公開してはなりません |
|
メソッド セキュリティは型のスーパーセットでなければなりません |
|
APTCA メソッドは APTCA メソッドのみを呼び出すことができます |
|
APTCA 型は APTCA 基本型のみを拡張することができます |
|
リンク要求を含むメソッドを間接的に公開しません |
|
オーバーライドのリンク確認要求はベースと同様です。 |
|
脆弱性のある finally 句を外側の try でラップします |
|
型のリンク要求には継承要求が必要です |
|
セキュリティが重要な型は型の等価性に参加しないことがあります。 |
|
既定のコンストラクターは、基本型の既定コンストラクターと同程度以上、重要であることが必要 |
|
デリゲートは、一貫した透過性でメソッドにバインドしなければなりません |
|
メソッドと基本メソッドをオーバーライドする場合、一貫した透過性を保持する必要があります |
|
透過的メソッドは、検証可能な IL だけです |
|
透過的メソッドが、SuppressUnmanagedCodeSecurity 属性のメソッドを呼び出すことはできません |
|
透過的なコードではセキュリティが重要な重要項目を参照することはできません。 |
|
透過的メソッドは LinkDemands を満たすことはできません |
|
型は、基本型およびインターフェイスと同程度以上、重要でなければならない |
|
透過的メソッドにはセキュリティ アサートを使用できない場合もあります。 |
|
透過的メソッドは、ネイティブ コードを呼び出す必要があります |
|
スタック詳細を保持するために再度スローします。 |
|
オブジェクトを複数回破棄しない |
|
値型のスタティック フィールドのインラインを初期化します |
|
サービス コンポーネントを WebMethod に設定しません |
|
破棄可能なフィールドは破棄されなければなりません |
|
コンストラクターのオーバーライド可能なメソッドを呼び出しません |
|
破棄可能な型はファイナライザーを宣言しなければなりません |
|
ファイナライザーは基底クラスのファイナライザーを呼び出さなければなりません |
|
シリアル化コンストラクターを実装します |
|
ValueType.Equals のオーバーライドで、演算子 equals をオーバーロードします。 |
|
Windows フォームのエントリ ポイントを STAThread に設定します |
|
すべてのシリアル化不可能なフィールドを設定します |
|
ISerializable 型で基底クラス メソッドを呼び出します |
|
ISerializable 型を SerializableAttribute に設定します |
|
シリアル化メソッドを正しく実装します |
|
ISerializable を正しく実装します |
|
書式設定メソッドに正しい引数を提供 |
|
NaN に対して正しくテストします |
|
Enums は 0 値を含んでいなければなりません |
|
オーバーロードする加算および減算で、演算子 equals をオーバーロードします。 |
|
ローカライズされるパラメーターとしてリテラルを渡さない |
|
文字列を大文字に標準化します。 |
|
メソッドの結果を無視しない |
|
GC.SuppressFinalize を正しく呼び出します |
|
プロパティは、配列を返すことはできません。 |
|
文字列の長さを使用して空の文字列をテストします |
|
対象のフレームワークから API のみを使用します |
|
GC.KeepAlive への呼び出しを削除します |
|
SafeHandle を使用して、ネイティブ リソースを要約します |
|
汎用ハンドラーの CLSCompliant でない例外をキャッチします |
|
読み取り専用の変更可能な参照型を宣言しません |
|
配列フィールドを読み取り専用にすることはできません |
|
アサートをセキュリティで保護します |
|
ネイティブ リソースを使用しているときには GC.KeepAlive を呼び出します |
|
プライベート インターフェイスを満たすメソッドをシールします |
|
シリアル化コンストラクターをセキュリティで保護します |
|
静的コンストラクターはプライベートでなければなりません |
|
セキュリティが重要な定数は透過的です。 |
|
Win32 API に相当するマネージ API を使用します |
|
Dispose メソッドから基底クラスの Dispose を呼び出す |
|
ファイナライザーは保護されなければなりません |
|
継承されたメンバーの参照範囲を縮小しません |
|
メンバーは、戻り値の型以外にも異なる点がなければなりません |
|
演算子の Equals のオーバーロードのオーバーライドである |
|
演算子は対称型オーバーロードを含まなければなりません |
|
Collection プロパティは読み取り専用でなければなりません |
|
省略可能なフィールドに、逆シリアル化メソッドを指定します |
|
標準例外コンストラクターを実装します |
|
URI パラメーターを文字列にすることはできません |
|
URI 戻り値を文字列にすることはできません |
|
URI プロパティを文字列にすることはできません |
|
文字列 URI オーバーロードが、System.Uri オーバーロードを呼び出します |
|
COM 参照可能インターフェイスでのオーバーロードを避けてください |
|
Visual Basic 6 クライアントに対しては Int64 引数を使用しません |
|
Com 参照可能な型で静的メンバーを使用しません |
|
AutoDual ClassInterfaceType を使用しないでください |
|
COM の参照可能な型が作成されます。 |
|
COM 登録メソッドは参照可能であることはできません |
|
ComSource インターフェイスを IDispatch として設定します |
|
Com 参照可能な値型ではパブリックでないフィールドを使用しません |
|
ブール型の P/Invoke 引数を MarshalAs に設定します |
|
アイドル状態のプロセス優先度を使用しません |
|
電源の状態の変更を妨げるタイマーを使用しません |
|
アセンブリを NeutralResourcesLanguageAttribute に設定します |
|
問題が発生する可能性のあるメソッドは呼び出しません |
|
ファイバーをスレッドとして扱いません |
|
レベル 2 アセンブリは LinkDemands を含めることはできません。 |
|
メンバーが矛盾した透過性のある注釈を指定する必要はありません。 |
|
透過的メソッドは HandleProcessCorruptingExceptions 属性を使用できない場合もあります。 |
|
透過的なコードでは、LinkDemand で保護することはできません。 |
|
透過的メソッドが、セキュリティ確認要求を使用する必要があります。 |
|
透過的なコードでは、バイト配列からアセンブリを読み込むことはできません。 |
|
透過的セキュリティ メソッドは、SuppressUnmanagedCodeSecurityAttribute と修飾しないでください。 |
|
リテラルに正しいスペルを要求 |
|
非定数フィールドは表示されません |
|
enums を FlagsAttribute に設定しません |
|
オーバーライドする Equals で GetHashCode をオーバーライドします |
|
exception 句に例外を発生させないでください |
|
演算子オーバーロードには名前付けされた代替が存在します |
|
未公開のリソース形式を出荷しません |
|
可変引数に対して param を使用します |
|
操作はオーバーフローできません |
|
文字列の代わりに System.Uri オブジェクトを渡します |
|
属性文字列リテラルは、正しく解析する必要があります。 |