"Microsoft 拡張正確性規則" 規則セットでは、コード分析によって報告される論理エラーやフレームワーク使用エラーの検出範囲が最大化されます。 COM 相互運用機能やモバイル アプリケーションなど、特定のシナリオに重点が置かれています。 これらのシナリオのいずれかに該当するプロジェクトがある場合や、プロジェクト内の問題をさらに細かく探す必要がある場合には、この規則セットの使用を検討してください。
"Microsoft 拡張正確性規則" 規則セットには、"Microsoft 基本正確性規則" 規則セット内の規則が含まれます。 基本正確性規則には、"Microsoft 最小推奨規則" 規則セット内の規則が含まれます。 詳細については、「"Microsoft 基本正確性規則" コード分析規則セット」および「"Microsoft 最小推奨規則" コード分析規則セット」を参照してください。
"Microsoft 拡張正確性規則" 規則セット内のすべての規則について、以下の表で説明します。
規則 |
説明 |
---|---|
コンストラクターを完全に宣言していないと、例外を正しく処理するのが困難になります。 |
|
メソッドで URI の文字列形式を使用する場合、対応するオーバーロードを宣言し、URI クラスのインスタンスを使用します。こうすることで、安全な方法でこのサービスを実現できます。 |
|
この規則では、メソッドは URI (Uniform Resource Identifier) を返すと想定されます。 URI の文字列表現は解析エラーやエンコーディング エラーが発生しやすく、セキュリティ上の脆弱性の原因となる場合があります。 System.Uri クラスを使用すると、安全な方法でこのサービスを実現できます。 |
|
この規則では、プロパティは URI (Uniform Resource Identifier) を表すと想定されます。 URI の文字列表現は解析エラーやエンコーディング エラーが発生しやすく、セキュリティ上の脆弱性の原因となる場合があります。 System.Uri クラスを使用すると、安全な方法でこのサービスを実現できます。 |
|
文字列パラメーターが System.Uri パラメーターに置き換えられている点だけが異なるメソッド オーバーロードが型で宣言されています。 文字列パラメーターを使用するオーバーロードは、URI パラメーターを使用するオーバーロードを呼び出しません。 |
|
オーバーロードされたメソッドが COM クライアントに公開されると、最初のメソッド オーバーロードだけが名前を保持します。 後続のオーバーロードは、名前にアンダースコア文字 (_) およびオーバーロードの宣言の順序に対応する整数が付加され、一意の名前に変更されます。 |
|
Visual Basic 6 COM クライアントでは、64 ビット整数にアクセスできません。 |
|
COM では静的メソッドをサポートしていません。 |
|
デュアル インターフェイスを使用する型を使用することで、クライアントを特定のインターフェイス レイアウトに対応付けることができます。 将来のバージョンで、この型またはその基本型のレイアウトに変更が加えられると、インターフェイスに対応付けられた COM クライアントが切り離されます。 既定では、ClassInterfaceAttribute 属性が指定されていない場合、ディスパッチのみのインターフェイスが使用されます。 |
|
COM から参照できると明確にマークされている参照型に、パブリックのパラメーター付きコンストラクターが含まれますが、パブリックの既定 (パラメーターなし) コンストラクターが含まれません。 パブリックの既定コンストラクターがない型は、COM クライアントで作成できません。 |
|
System.Runtime.InteropServices.ComRegisterFunctionAttribute 属性または System.Runtime.InteropServices.ComUnregisterFunctionAttribute 属性でマークされたメソッドが外部から参照できます。 |
|
型が System.Runtime.InteropServices.ComSourceInterfacesAttribute 属性によってマークされていますが、1 つ以上の指定されたインターフェイスが ComInterfaceType.InterfaceIsIDispatch に設定された System.Runtime.InteropServices.InterfaceTypeAttribute 属性によってマークされていません。 |
|
COM から参照できる値型の非パブリック インスタンス フィールドは、COM クライアントで表示できます。 フィールドの内容を調べて、公開するべきではない情報や、設計またはセキュリティに意図しない影響を及ぼす情報が含まれていないかを確認してください。 |
|
Boolean データ型は、アンマネージ コードの複数の表現を持っています。 |
|
プロセス優先順位に Idle を設定しないでください。 System.Diagnostics.ProcessPriorityClass.Idle を設定したプロセスは、CPU を占有するか、そうでない場合はアイドル状態になるため、スタンバイ状態がブロックされます。 |
|
定期的な動作の頻度が高くなると、CPU のビジー状態が続き、ディスプレイとハード ディスクをオフにする省電力アイドル タイマーに影響を与えます。 |
|
オブジェクトの有効期間を追跡する際にパフォーマンス オーバーヘッドが増大するため、ファイナライザーは可能な限り使用しないでください。 空のファイナライザーを使用すると、オーバーヘッドが増大するだけで何の利点もありません。 |
|
NeutralResourcesLanguage 属性は、ResourceManager に対し、アセンブリのニュートラル カルチャのリソースを表示するために使用した言語を通知します。 これにより、読み込んだ最初のリソースに対する検索のパフォーマンスが向上し、ワーキング セットを縮小できます。 |
|
メンバーが危険性または問題のあるメソッドを呼び出します。 |
|
マネージ スレッドが Win32 スレッドとして扱われています。 |
|
メソッド本体に含まれるリテラル文字列内に Microsoft スペル チェック ライブラリで認識されない語が 1 つ以上あります。 |
|
定数でも読み取り専用でもない静的フィールドは、スレッド セーフではありません。 このようなフィールドへのアクセスは、慎重に制御してください。また、クラス オブジェクトへのアクセスを同期するには、高度なプログラミング技術が必要です。 |
|
外部から参照できる列挙型が FlagsAttribute でマークされ、その列挙型に、2 の累乗でもなく、その列挙型で定義されている他の値の組み合わせでもない値が 1 つ以上含まれています。 |
|
GetHashCode は、現在のインスタンスに基づいて、ハッシュ アルゴリズムとデータ構造 (ハッシュ テーブルなど) に適した値を返します。 同じ型で等値の 2 つのオブジェクトによって同じハッシュ コードが返される必要があります。 |
|
finally 句または fault 句で例外が発生すると、アクティブな例外が新しい例外によって隠されます。 filter 句で例外が発生すると、ランタイムがその例外を暗黙的にキャッチします。 これにより、元のエラーの検出およびデバッグが困難になります。 |
|
演算子のオーバーロードが検出され、予想される名前の代替メソッドが検出されませんでした。 名前付きの代替メンバーによって、演算子と同じ機能へアクセスできるようになります。また、演算子のオーバーロードをサポートしていない言語でプログラミングする場合でも、その代替メンバーを使用できます。 |
|
以前のバージョンの .NET Framework でビルドされたリソース ファイルは、サポートされるバージョンの .NET Framework で使用できないことがあります。 |
|
パブリック型またはプロテクト型に、params キーワードではなく VarArgs 呼び出し規約を使用するパブリック メソッドまたはプロテクト メソッドが含まれています。 |
|
まずオペランドを検証し、演算結果が関連するデータ型で使用できる値の範囲を超えないことを確認してから、算術演算を実行します。 |
|
"uri"、"URI"、"urn"、"URN"、"url"、または "URL" という名前を持つ文字列パラメーターが指定されているメソッドに対して、呼び出しが行われました。 そのメソッドの型宣言に対応するメソッドのオーバーロードが存在し、それに対して System.Uri パラメーターが指定されています。 |
|
属性文字列のリテラル パラメーターが URL、GUID、またはバージョンとして正しく解析されません。 |