次の方法で共有


コードでの属性宣言または属性の使用に関連するエラーと警告を解決する

この記事では、次のコンパイラ エラーについて説明します。

  • CS0243: 条件付き属性はオーバーライド メソッドであるため、'method' では無効です。
  • CS0404: 属性はこの宣言型では無効です。
  • CS0415: この属性は、明示的なインターフェイス メンバー宣言ではないインデクサーでのみ有効です。
  • CS0416: 'type parameter': 属性引数は型パラメーターを使用できません。
  • CS0447: 属性を型引数と共に使用することはできません。
  • CS0577: 条件付き属性は、コンストラクター、デストラクター、演算子、ラムダ式、または明示的なインターフェイス実装であるため、無効です。
  • CS0578: 戻 り値の型が void ではないため、条件属性は 'function' では無効です。
  • CS0582: 条件付き属性は、インターフェイス メンバーでは無効です。
  • CS0609: オーバーライドとしてマークされたインデクサーに属性を設定できません。
  • CS0625: StructLayout(LayoutKind.Explicit) でマークされた型のインスタンス フィールドには、FieldOffset 属性が必要です。
  • CS0629: 条件付きメンバー 'member' は、型 'Type Name' のインターフェイス メンバー '基底クラス メンバー' を実装できません。
  • CS0636: FieldOffset 属性は、StructLayout(LayoutKind.Explicit) でマークされた型のメンバーにのみ配置できます
  • CS0637: FieldOffset 属性は、静的フィールドまたは const フィールドでは使用できません。
  • CS0641: この属性は、System.Attribute から派生したクラスでのみ有効です。
  • CS0646: インデクサーを含む型に DefaultMember 属性を指定できません。
  • CS0653: 属性クラス 'class' は抽象であるため、適用できません。
  • CS0657: Location はこの宣言の有効な属性の場所ではありません。この宣言の有効な属性の場所が一覧表示されます。このブロック内のすべての属性は無視されます。
  • CS0658: Location は認識された属性の場所ではありません。この宣言の有効な属性の場所が一覧表示されます。このブロック内のすべての属性は無視されます。
  • CS0685: 条件付きメンバー 'member' に out パラメーターを指定することはできません。
  • CS7014: 属性はこのコンテキストでは無効です。
  • CS7046: 属性パラメーターを指定する必要があります。
  • CS7047: 属性パラメーター 'parameter1' または 'parameter2' を指定する必要があります。
  • CS7067: 属性コンストラクター パラメーターは省略可能ですが、既定のパラメーター値は指定されませんでした。
  • CS9331: 属性を手動で適用することはできません。

属性の引数とパラメーター

属性引数またはパラメーターを誤って使用すると、次のエラーが発生します。

  • CS0416: 'type parameter': 属性引数は型パラメーターを使用できません。
  • CS0447: 属性を型引数と共に使用することはできません。
  • CS7046: 属性パラメーターを指定する必要があります。
  • CS7047: 属性パラメーター 'parameter1' または 'parameter2' を指定する必要があります。
  • CS7067: 属性コンストラクター パラメーターは省略可能ですが、既定のパラメーター値は指定されませんでした。

これらのエラーを修正するには、次の規則に従います。

  • 型パラメーターの代わりに属性引数にコンパイル時定数値を使用します (CS0416)。 属性引数はコンパイル時に評価する必要があります。
  • 属性で型引数を使用しないでください (CS0447)。 属性の使用では、型引数は使用できません。
  • 属性を適用するときに必要なすべての属性パラメーターを指定します (CS7046CS7047)。 属性のコンストラクターを調べて、必須のパラメーターを確認します。
  • カスタム属性を定義するときに、省略可能なコンストラクター パラメーターの既定値を指定します (CS7067)。 属性コンストラクターで構文 parameterType parameterName = defaultValue を使用します。

詳細については、「 属性ジェネリック」を参照してください。

CS0447 は Roslyn では使用されなくなりました。

属性クラスの要件

必要な制約を満たしていない属性クラスを定義すると、次のエラーが発生します。

  • CS0404: 属性はこの宣言型では無効です。
  • CS0641: この属性は、System.Attribute から派生したクラスでのみ有効です。
  • CS0653: 属性クラス 'class' は抽象であるため、適用できません。

これらのエラーを修正するには、次の規則に従います。

  • 有効な宣言型 (CS0404) にのみ属性を適用します。 属性の AttributeUsage を調べて、許可されているターゲットを確認します。
  • 属性クラスから abstract 修飾子を削除するか、非抽象属性クラス (CS0653) から派生させます。 属性はインスタンス化可能である必要があります。
  • AttributeUsageAttribute (Attribute) から派生したクラスにのみを適用します。 この属性は、他の属性の使用方法を制御します。

詳細については、「 カスタム属性の作成」を参照してください。

属性の場所のコンテキスト

無効な場所または正しくないターゲット指定子で属性を適用すると、次のエラーが発生します。

  • CS0657: Location はこの宣言の有効な属性の場所ではありません。この宣言の有効な属性の場所が一覧表示されます。このブロック内のすべての属性は無視されます。
  • CS0658: Location は認識された属性の場所ではありません。この宣言の有効な属性の場所が一覧表示されます。このブロック内のすべての属性は無視されます。
  • CS7014: 属性はこのコンテキストでは無効です。

これらのエラーを修正するには、次の規則に従います。 詳細については、「 属性ターゲット」を参照してください。

  • 宣言に有効な属性ターゲット指定子を使用します (CS0657)。 エラー メッセージを確認して、特定の宣言に対して有効なターゲットを確認します。
  • 無効な属性ターゲット指定子 (CS0658) を削除します。 有効な指定子には、 assembly:module:type:method:property:field:event:param:、および return:が含まれます。
  • 属性を有効なコンテキストに移動します (CS7014)。 属性は、 AttributeUsageAttributeで定義されているように、それらをサポートするプログラム要素にのみ適用できます。
  • 適切なスコープ レベルで属性を適用します。 アセンブリ レベルまたはモジュール レベルの属性には、 assembly: または module: プレフィックスを使用します。

定義済みの属性

特定の定義済みの .NET 属性を誤って使用すると、次のエラーが発生します。

  • CS0415: この属性は、明示的なインターフェイス メンバー宣言ではないインデクサーでのみ有効です。
  • CS0609: オーバーライドとしてマークされたインデクサーに属性を設定できません。
  • CS0625: StructLayout(LayoutKind.Explicit) でマークされた型のインスタンス フィールドには、FieldOffset 属性が必要です。
  • CS0636: FieldOffset 属性は、StructLayout(LayoutKind.Explicit) でマークされた型のメンバーにのみ配置できます
  • CS0637: FieldOffset 属性は、静的フィールドまたは const フィールドでは使用できません。
  • CS0646: インデクサーを含む型に DefaultMember 属性を指定できません。
  • CS9331: 属性を手動で適用することはできません。

これらのエラーを修正するには、次の規則に従います。 詳細については、「 インデクサープラットフォーム呼び出し (P/Invoke)」を参照してください。

  • 明示的なインターフェイス実装 (IndexerNameAttribute) からを削除します。 パブリック インデクサーにのみ適用します。
  • IndexerName (override) でマークされたインデクサーからを削除します。 オーバーライド インデクサーは、基底クラスから名前を継承します。
  • FieldOffsetAttributeStructLayoutAttribute (LayoutKind.Explicit) に設定されている型のすべてのインスタンス フィールドにを追加します。 明示的なレイアウトには、明示的なフィールド位置が必要です。
  • FieldOffset (StructLayout(LayoutKind.Explicit)) の型にのみを適用します。 StructLayout属性を型宣言に追加します。
  • FieldOffset または static フィールド (const) からを削除します。 明示的なレイアウトは、インスタンス フィールドにのみ適用されます。
  • インデクサー (DefaultMemberAttribute) を含む型からを削除します。 インデクサーは、既定のメンバーを自動的に定義します。
  • コンパイラによって生成された属性を同等の C# 構文 (CS9331) に置き換えます。 予約済み属性を手動で適用する代わりに、言語キーワードを使用します。

条件付き属性の使用

使用制限に違反する方法で ConditionalAttribute を適用すると、次のエラーが発生します。

  • CS0243: 条件付き属性はオーバーライド メソッドであるため、'method' では無効です。
  • CS0577: 条件付き属性は、コンストラクター、デストラクター、演算子、ラムダ式、または明示的なインターフェイス実装であるため、無効です。
  • CS0578: 戻 り値の型が void ではないため、条件属性は 'function' では無効です。
  • CS0582: 条件付き属性は、インターフェイス メンバーでは無効です。
  • CS0629: 条件付きメンバー 'member' は、型 'Type Name' のインターフェイス メンバー '基底クラス メンバー' を実装できません。
  • CS0685: 条件付きメンバー 'member' に out パラメーターを指定することはできません。

これらのエラーを修正するには、次の規則に従います。 詳細については、「 ConditionalAttribute属性」を参照してください。

  • Conditional メソッドから 属性を削除するか、override キーワード (CS0243) を削除します。 コンパイラは、オーバーライドではなく、基本メソッドにバインドします。
  • コンストラクター、Conditional、演算子、ラムダ式、または明示的なインターフェイス実装 (CS0577) にを適用しないでください。 これらのメンバー型は、条件付きコンパイルをサポートしていません。
  • メソッドの戻り値の型を voidに変更するか、 Conditional 属性 (CS0578) を削除します。 呼び出しはコンパイルアウトされる可能性があるため、条件付きメソッドは void を返す必要があります。
  • インターフェイス メンバー宣言 (Conditional) から属性を削除します。 インターフェイス メンバーを条件付きにすることはできません。
  • インターフェイス メンバーの実装 (Conditional) から属性を削除します。 インターフェイス メンバーを実装するメソッドを条件付きにすることはできません。
  • 条件付きメソッドから out パラメーターを削除するか、 Conditional 属性 (CS0685) を削除します。 out変数の値は、メソッド呼び出しがコンパイルされるときに未定義になります。