次の方法で共有


"Microsoft 拡張正確性規則" コード分析規則セット

"Microsoft 拡張正確性規則" 規則セットでは、コード分析によって報告される論理エラーやフレームワーク使用エラーの検出範囲が最大化されます。 COM 相互運用機能やモバイル アプリケーションなど、特定のシナリオに重点が置かれています。 これらのシナリオのいずれかに該当するプロジェクトがある場合や、プロジェクト内の問題をさらに細かく探す必要がある場合には、この規則セットの使用を検討してください。

"Microsoft 拡張正確性規則" 規則セットには、"Microsoft 基本正確性規則" 規則セット内の規則が含まれます。 基本正確性規則には、"Microsoft 最小推奨規則" 規則セット内の規則が含まれます。 詳細については、「"Microsoft 基本正確性規則" コード分析規則セット」および「"Microsoft 最小推奨規則" コード分析規則セット」を参照してください。

"Microsoft 拡張正確性規則" 規則セット内のすべての規則について、以下の表で説明します。

規則

説明

CA1032: 標準例外コンストラクターを実装します

コンストラクターを完全に宣言していないと、例外を正しく処理するのが困難になります。

CA1054: URI パラメーターを文字列にすることはできません

メソッドで URI の文字列形式を使用する場合、対応するオーバーロードを宣言し、URI クラスのインスタンスを使用します。こうすることで、安全な方法でこのサービスを実現できます。

CA1055: URI 戻り値を文字列にすることはできません

この規則では、メソッドは URI (Uniform Resource Identifier) を返すと想定されます。 URI の文字列表現は解析エラーやエンコーディング エラーが発生しやすく、セキュリティ上の脆弱性の原因となる場合があります。 System.Uri クラスを使用すると、安全な方法でこのサービスを実現できます。

CA1056: URI プロパティを文字列にすることはできません

この規則では、プロパティは URI (Uniform Resource Identifier) を表すと想定されます。 URI の文字列表現は解析エラーやエンコーディング エラーが発生しやすく、セキュリティ上の脆弱性の原因となる場合があります。 System.Uri クラスを使用すると、安全な方法でこのサービスを実現できます。

CA1057: 文字列 URI オーバーロードが、System.Uri オーバーロードを呼び出します

文字列パラメーターが System.Uri パラメーターに置き換えられている点だけが異なるメソッド オーバーロードが型で宣言されています。 文字列パラメーターを使用するオーバーロードは、URI パラメーターを使用するオーバーロードを呼び出しません。

CA1402: COM 参照可能インターフェイスでのオーバーロードを避けてください

オーバーロードされたメソッドが COM クライアントに公開されると、最初のメソッド オーバーロードだけが名前を保持します。 後続のオーバーロードは、名前にアンダースコア文字 (_) およびオーバーロードの宣言の順序に対応する整数が付加され、一意の名前に変更されます。

CA1406: Visual Basic 6 クライアントに対しては Int64 引数を使用しません

Visual Basic 6 COM クライアントでは、64 ビット整数にアクセスできません。

CA1407: Com 参照可能な型で静的メンバーを使用しません

COM では静的メソッドをサポートしていません。

CA1408: AutoDual ClassInterfaceType を使用しないでください

デュアル インターフェイスを使用する型を使用することで、クライアントを特定のインターフェイス レイアウトに対応付けることができます。 将来のバージョンで、この型またはその基本型のレイアウトに変更が加えられると、インターフェイスに対応付けられた COM クライアントが切り離されます。 既定では、ClassInterfaceAttribute 属性が指定されていない場合、ディスパッチのみのインターフェイスが使用されます。

CA1409: COM 参照可能な型は作成可能でなければなりません

COM から参照できると明確にマークされている参照型に、パブリックのパラメーター付きコンストラクターが含まれますが、パブリックの既定 (パラメーターなし) コンストラクターが含まれません。 パブリックの既定コンストラクターがない型は、COM クライアントで作成できません。

CA1411: COM 登録メソッドは参照可能であることはできません

System.Runtime.InteropServices.ComRegisterFunctionAttribute 属性または System.Runtime.InteropServices.ComUnregisterFunctionAttribute 属性でマークされたメソッドが外部から参照できます。

CA1412: ComSource インターフェイスを IDispatch として設定します

型が System.Runtime.InteropServices.ComSourceInterfacesAttribute 属性によってマークされていますが、1 つ以上の指定されたインターフェイスが ComInterfaceType.InterfaceIsIDispatch に設定された System.Runtime.InteropServices.InterfaceTypeAttribute 属性によってマークされていません。

CA1413: Com 参照可能な値型ではパブリックでないフィールドを使用しません

COM から参照できる値型の非パブリック インスタンス フィールドは、COM クライアントで表示できます。 フィールドの内容を調べて、公開するべきではない情報や、設計またはセキュリティに意図しない影響を及ぼす情報が含まれていないかを確認してください。

CA1414: ブール型の P/Invoke 引数を MarshalAs に設定します

Boolean データ型は、アンマネージ コードの複数の表現を持っています。

CA1600: アイドル状態のプロセス優先度を使用しません

プロセス優先順位に Idle を設定しないでください。 System.Diagnostics.ProcessPriorityClass.Idle を設定したプロセスは、CPU を占有するか、そうでない場合はアイドル状態になるため、スタンバイ状態がブロックされます。

CA1601: 電源の状態の変更を妨げるタイマーを使用しません

定期的な動作の頻度が高くなると、CPU のビジー状態が続き、ディスプレイとハード ディスクをオフにする省電力アイドル タイマーに影響を与えます。

CA1821: 空のファイナライザーを削除します

オブジェクトの有効期間を追跡する際にパフォーマンス オーバーヘッドが増大するため、ファイナライザーは可能な限り使用しないでください。 空のファイナライザーを使用すると、オーバーヘッドが増大するだけで何の利点もありません。

CA1824: アセンブリを NeutralResourcesLanguageAttribute に設定します

NeutralResourcesLanguage 属性は、ResourceManager に対し、アセンブリのニュートラル カルチャのリソースを表示するために使用した言語を通知します。 これにより、読み込んだ最初のリソースに対する検索のパフォーマンスが向上し、ワーキング セットを縮小できます。

CA2001: 問題が発生する可能性のあるメソッドは呼び出しません

メンバーが危険性または問題のあるメソッドを呼び出します。

CA2003: ファイバーをスレッドとして扱いません

マネージ スレッドが Win32 スレッドとして扱われています。

CA2204: リテラルは正しく入力されていなければなりません

メソッド本体に含まれるリテラル文字列内に Microsoft スペル チェック ライブラリで認識されない語が 1 つ以上あります。

CA2211: 非定数フィールドは表示されません

定数でも読み取り専用でもない静的フィールドは、スレッド セーフではありません。 このようなフィールドへのアクセスは、慎重に制御してください。また、クラス オブジェクトへのアクセスを同期するには、高度なプログラミング技術が必要です。

CA2217: enums を FlagsAttribute に設定しません

外部から参照できる列挙型が FlagsAttribute でマークされ、その列挙型に、2 の累乗でもなく、その列挙型で定義されている他の値の組み合わせでもない値が 1 つ以上含まれています。

CA2218: オーバーライドする Equals で GetHashCode をオーバーライドします

GetHashCode は、現在のインスタンスに基づいて、ハッシュ アルゴリズムとデータ構造 (ハッシュ テーブルなど) に適した値を返します。 同じ型で等値の 2 つのオブジェクトによって同じハッシュ コードが返される必要があります。

CA2219: exception 句に例外を発生させないでください

finally 句または fault 句で例外が発生すると、アクティブな例外が新しい例外によって隠されます。 filter 句で例外が発生すると、ランタイムがその例外を暗黙的にキャッチします。 これにより、元のエラーの検出およびデバッグが困難になります。

CA2225: 演算子オーバーロードには名前付けされた代替が存在します

演算子のオーバーロードが検出され、予想される名前の代替メソッドが検出されませんでした。 名前付きの代替メンバーによって、演算子と同じ機能へアクセスできるようになります。また、演算子のオーバーロードをサポートしていない言語でプログラミングする場合でも、その代替メンバーを使用できます。

CA2228: 未公開のリソース形式を出荷しません

以前のバージョンの .NET Framework でビルドされたリソース ファイルは、サポートされるバージョンの .NET Framework で使用できないことがあります。

CA2230: 可変引数に対して param を使用します

パブリック型またはプロテクト型に、params キーワードではなく VarArgs 呼び出し規約を使用するパブリック メソッドまたはプロテクト メソッドが含まれています。

CA2233: 操作はオーバーフローできません

まずオペランドを検証し、演算結果が関連するデータ型で使用できる値の範囲を超えないことを確認してから、算術演算を実行します。

CA2234: 文字列の代わりに System.Uri オブジェクトを渡します

"uri"、"URI"、"urn"、"URN"、"url"、または "URL" という名前を持つ文字列パラメーターが指定されているメソッドに対して、呼び出しが行われました。 そのメソッドの型宣言に対応するメソッドのオーバーロードが存在し、それに対して System.Uri パラメーターが指定されています。

CA2243: 属性文字列リテラルは、正しく解析する必要があります

属性文字列のリテラル パラメーターが URL、GUID、またはバージョンとして正しく解析されません。