この記事では、次のコンパイラ エラーについて説明します。
- 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)。 属性の使用では、型引数は使用できません。
- 属性を適用するときに必要なすべての属性パラメーターを指定します (CS7046、 CS7047)。 属性のコンストラクターを調べて、必須のパラメーターを確認します。
- カスタム属性を定義するときに、省略可能なコンストラクター パラメーターの既定値を指定します (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) でマークされたインデクサーからを削除します。 オーバーライド インデクサーは、基底クラスから名前を継承します。 -
FieldOffsetAttributeが StructLayoutAttribute (
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変数の値は、メソッド呼び出しがコンパイルされるときに未定義になります。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET