言語の機能とバージョンのエラーと警告を解決する

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

  • CS0171: コントロールが呼び出し元に返される前に、フィールド 'name' を完全に割り当てる必要があります。言語バージョン 'version' に更新して、フィールドを自動既定値にすることを検討してください。
  • CS0188: 'this' オブジェクトは、すべてのフィールドが割り当てられる前に使用できません。言語バージョン 'version' に更新して、割り当てられていないフィールドを自動既定値にすることを検討してください。
  • CS0843: コントロールが呼び出し元に返される前に、自動実装プロパティ 'name' を完全に割り当てる必要があります。言語バージョン 'version' に更新して、プロパティを自動既定値にすることを検討してください。
  • CS1617: /langversion のオプション 'option' が無効です。サポートされている値を一覧表示するには、'/langversion:?' を使用します。
  • CS1638: 'identifier' は予約済み識別子であり、ISO 言語バージョン モードを使用する場合は使用できません
  • CS1738: 名前付き引数の指定は、すべての固定引数が指定された後に指定する必要があります。末尾以外の名前付き引数を許可するには、言語バージョン 7.2 以降を使用してください。
  • CS8021: RuntimeMetadataVersion の値が見つかりません。System.Object を含むアセンブリが見つかりませんでした。また、オプションで指定された RuntimeMetadataVersion の値もありませんでした。
  • CS8022: 機能は C# 1 では使用できません。言語バージョン 2 以上を使用してください。
  • CS8023: 機能は C# 2 では使用できません。言語バージョン 3 以上を使用してください。
  • CS8024: 機能は C# 3 では使用できません。言語バージョン 4 以上を使用してください。
  • CS8025: 機能は C# 4 では使用できません。言語バージョン 5 以上を使用してください。
  • CS8026: 機能は C# 5 では使用できません。言語バージョン 6 以上を使用してください。
  • CS8058: 機能 'feature' は試験段階であり、サポートされていません。'/features:feature' を使用して有効にします。
  • CS8059: 機能は C# 6 では使用できません。言語バージョン 7 以上を使用してください。
  • CS8107: 機能は C# 7.0 では使用できません。言語バージョン 7.1 以降を使用してください。
  • CS8192: 指定された言語バージョンがサポートされていないか無効です: 'value'。
  • CS8302: 機能は C# 7.1 では使用できません。言語バージョン 7.2 以降を使用してください。
  • CS8303: 指定された言語バージョン 'value' に先頭にゼロを付けることはできません
  • CS8304: コンパイラ バージョン: 'version'。言語バージョン: バージョン。
  • CS8305: 'type' は評価のみを目的としており、今後の更新で変更または削除される可能性があります。
  • CS8306: タプル要素名 'name' が推論されます。推論された名前で要素にアクセスするには、言語バージョン 7.1 以上を使用してください。
  • CS8314: 型 'type' の式は、C# バージョンの型 'type' のパターンでは処理できません。言語バージョン 'version' 以上を使用してください。
  • CS8320: 機能は C# 7.2 では使用できません。言語バージョン 7.3 以降を使用してください。
  • CS8370: 機能は C# 7.3 では使用できません。言語バージョン 8 以上を使用してください。
  • CS8371: 自動プロパティのフィールドターゲット属性は、言語バージョン 7.3 ではサポートされていません。言語バージョン 8.0 以降を使用してください。
  • CS8400: 機能は C# 8 では使用できません。言語バージョン 9 以上を使用してください。
  • CS8401: 補間された逐語的文字列に '$@' の代わりに '@$' を使用するには、言語バージョン 8.0 以上を使用してください。
  • CS8511: 型 'type' の式は、型 'type' のパターンでは扱えません。オープン型を定数パターンと照合するには、言語バージョン 'version' 以降を使用してください。
  • CS8627: null 許容型パラメーターは、言語バージョン 'version' 以上を使用しない限り、値型または null 非許容参照型であることがわかっている必要があります。言語バージョンを変更するか、'class'、'struct'、または型制約を追加することを検討してください。
  • CS8630: 無効な 'option' 値: C# バージョンの 'value' です。言語バージョン 'version' 以上を使用してください。
  • CS8652: この機能は現在プレビュー段階であり、サポートされていません。プレビュー機能を使用するには、'preview' 言語バージョンを使用します。
  • CS8701: ターゲット ランタイムは、既定のインターフェイス実装をサポートしていません。
  • CS8702: ターゲット ランタイムは既定のインターフェイス実装をサポートしていないため、'member' は型 'type' のインターフェイス メンバー 'member' を実装できません。
  • CS8703: 修飾子 'modifier' は、C# バージョンのこの項目に対して無効です。言語バージョン 8.0 以降を使用してください。
  • CS8704: 'type' はインターフェイス メンバー 'member' を実装しません。'type' は、C# バージョンで非パブリック メンバーを暗黙的に実装することはできません。言語バージョン 'version' 以上を使用してください。
  • CS8706: この機能は C# 7.3 では使用できないため、型でインターフェイス メンバーを実装できません。
  • CS8707: ターゲット ランタイムは、インターフェイスのメンバーに対して'protected'、'protected internal'、または 'private protected' アクセシビリティをサポートしていません。
  • CS8773: 機能は C# 9 では使用できません。言語バージョン 10 以上を使用してください。
  • CS8830: ターゲット ランタイムは、オーバーライドでの共変の戻り値の型をサポートしていません。オーバーライドされたメンバー 'member' と一致させるには、戻り値の型を 'type' にする必要があります。
  • CS8831: ターゲット ランタイムでは、オーバーライドでの共変型はサポートされていません。オーバーライドされたメンバー 'member' と一致させるには、型が 'type' である必要があります。
  • CS8888: 'managed' 呼び出し規約をアンマネージ呼び出し規約指定子と組み合わせることはできません。
  • CS8889: ターゲット ランタイムは、拡張環境またはランタイム環境の既定の呼び出し規則をサポートしていません。
  • CS8890: 型 'type' が定義されていません。
  • CS8891: 型 'type' は、呼び出し規則として使用するためにパブリックである必要があります。
  • CS8904: 無効な分散: 言語バージョン 9.0 以上を使用しない限り、型パラメーターは 'member' で不変に有効である必要があります。
  • CS8912: シールされた 'Object.ToString' を持つレコードからの継承は、C# 9.0 ではサポートされていません。言語バージョン 10.0 以降を使用してください。
  • CS8919: ターゲット ランタイムは、インターフェイスの静的抽象メンバーをサポートしていません。
  • CS8929: ターゲット ランタイムはインターフェイスの静的抽象メンバーをサポートしていないため、'method' は型 'type' のインターフェイス メンバー 'member' を実装できません。
  • CS8936: 機能は C# 10 では使用できません。言語バージョン 11 以上を使用してください。
  • CS8957: 言語バージョン 8.0 では、'type' と 'type' の間に共通の型が見つからなかったため、条件式は無効です。ターゲット型変換を使用するには、言語バージョン 9.0 以降にアップグレードします。
  • CS8967: 非逐語補間文字列内の改行は、C# 10.0 ではサポートされていません。言語バージョン 11.0 以降を使用してください。
  • CS9014: 割り当てられていない可能性のある自動実装プロパティ 'name' の使用。言語バージョン 'version' に更新して、プロパティを自動既定値にすることを検討してください。
  • CS9015: 割り当てられていない可能性のあるフィールド 'name' の使用。言語バージョン 'version' に更新して、フィールドを自動既定値にすることを検討してください。
  • CS9016: 割り当てられていない可能性のある自動実装プロパティ 'name' の使用。言語バージョン 'version' に更新して、プロパティを自動既定値にすることを検討してください。
  • CS9017: 未割り当ての可能性があるフィールド 'name' を使用しています。フィールドが自動的に既定値に設定されるよう、言語バージョン 'version' への更新を検討してください。
  • CS9041: 'type' にはコンパイラ機能 'feature' が必要です。これは、このバージョンの C# コンパイラではサポートされていません。
  • CS9058: 機能は C# 11 では使用できません。言語バージョン 12 以上を使用してください。
  • CS9064: ターゲット ランタイムは ref フィールドをサポートしていません。
  • CS9103: 'type' は、認識できない RefSafetyRulesAttribute バージョンを持つモジュールで定義され、'11' が必要です。
  • CS9171: ターゲット ランタイムはインライン配列型をサポートしていません。
  • CS9194: 引数を 'ref' キーワードと共に渡すことができません。'ref' 引数を 'in' パラメーターに渡すには、言語バージョン 12 以上にアップグレードします。
  • CS9202: 機能は C# 12.0 では使用できません。言語バージョン 13 以上を使用してください。
  • CS9204: 'type' は評価のみを目的としており、今後の更新プログラムでは変更または削除される可能性があります。この診断を抑制して続行します。
  • CS9211: 'Experimental' 属性の diagnosticId 引数は有効な識別子である必要があります。
  • CS9240: ターゲット ランタイムでは、by-ref のようなジェネリックはサポートされていません。
  • CS9260: 機能は C# 13.0 では使用できません。言語バージョン 14 以上を使用してください。
  • CS9268: 'type' は評価目的でのみ使用され、今後の更新で変更または削除される可能性があります: 'message'。この診断を抑制して続行します。
  • CS9269: UnscopedRefAttribute は、C# 11 以降、または net7.0 以降を対象とする場合にのみ有効です。
  • CS9271: 型 'Microsoft.CodeAnalysis.EmbeddedAttribute' は、非ジェネリック、internal、file ローカルではなく、sealed、static ではなく、パラメーターなしのコンストラクターを持ち、System.Attribute を継承し、任意の型に適用可能である必要があります。
  • CS9327: 機能は C# 14.0 では使用できません。言語バージョン 'version' 以上を使用してください。
  • CS9328: メソッド 'method' は、ランタイム非同期で現在サポートされていない機能を使用します。'System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)' を使用して、メソッドをランタイム非同期からオプトアウトします。
  • CS9346: 更新では、明示的なインターフェイス実装を出力する必要があります。これは、アプリケーションを再起動しないとランタイムでサポートされていません。
  • CS9352: ターゲット ランタイムは、拡張レイアウトの種類をサポートしていません。

これらのエラーと警告の原因は、コンパイラまたはランタイムが使用している機能をサポートしていないということです。 解決策は、問題が言語バージョンの構成の問題、言語バージョンの不一致、ランタイムの制限、試験的な機能のいずれであるかによって異なります。

言語バージョンの構成エラー

  • CS1617: /langversion のオプション 'option' が無効です。サポートされている値を一覧表示するには、'/langversion:?' を使用します。
  • CS1638: 'identifier' は予約済み識別子であり、ISO 言語バージョン モードを使用する場合は使用できません
  • CS8192: 指定された言語バージョンがサポートされていないか無効です: 'value'。
  • CS8303: 指定された言語バージョン 'value' に先頭にゼロを付けることはできません
  • CS8304: コンパイラ バージョン: 'version'。言語バージョン: バージョン。

これらのエラーは、プロジェクト ファイルまたは <LangVersion> コンパイラ オプションの-langversion設定が無効であるか、インストールされているコンパイラと互換性がないことです。

プロジェクト ファイルの <LangVersion> 値を、有効な言語バージョンの文字列 (CS1617CS8192CS8303) に修正します。 有効な値には、 defaultlatestpreviewlatestMajor、または特定のバージョン番号 ( 7.38.09.01011121314など) が含まれます。 バージョン番号に先頭のゼロを含めないでください。 サポートされている値の完全な一覧については、 C# 言語のバージョン 管理を参照してください。

Tip

サポートされている言語バージョンの一覧を表示するには、この記事の表を参照するか、 -langversion:?でコンパイルするか、ビルドする前にプロジェクト ファイルに <LangVersion>?</LangVersion> を一時的に設定します。

指定した言語バージョン (CS8304) がコンパイラでサポートされているバージョンに.NET SDK を更新します。 C# コンパイラの各バージョンでは、特定の最大値までの言語バージョンがサポートされています。 コンパイラがサポートする言語バージョンより新しい言語バージョンを指定する場合は、SDK をアップグレードします。

二重アンダースコア識別子を削除するか、言語バージョンを ISO-1 または ISO-2 から新しいバージョン (CS1638) に変更します。 ISO 言語モードでは、ISO C# 仕様に準拠していないため、 __ (二重アンダースコア) を含む識別子が予約されます。

Note

現在の C# コンパイラは CS1638 を生成しなくなりました。 以前のコンパイラでは、 ISO-1 または ISO-2 言語バージョンを使用するときに、このエラーが生成されました。

コンパイラは、ターゲット フレームワークから既定の言語バージョンを決定します。

ターゲット バージョン C# 言語の既定のバージョン
.NET 11.x C# 15
.NET 10.x C# 14
.NET 9.x C# 13
.NET 8.x C# 12
.NET 7.x C# 11
.NET 6.x C# 10
.NET 5.x C# 9.0
.NET コア 3.x C# 8.0
.NET コア 2.x C# 7.3
.NET Standard 2.1 C# 8.0
.NET Standard 2.0 C# 7.3
.NET Standard 1.x C# 7.3
.NET Framework すべて C# 7.3

プロジェクト ファイルから LangVersion 要素を削除すると、コンパイラはターゲット フレームワークの既定値を使用します。 特定のバージョンを指定して、新しい機能を有効にすることもできます。

説明
preview コンパイラは、最新のプレビュー バージョンの有効な言語構文をすべて受け入れます。
latest コンパイラは、最新リリース バージョンのコンパイラ (マイナー バージョンを含む) の構文を受け入れます。
latestMajor
または default
コンパイラは、最新リリースのメジャー バージョンのコンパイラの構文を受け入れます。
15.0 コンパイラは、C# 15 以下に含まれる構文のみを受け入れます。
14.0 コンパイラは、C# 14 以下に含まれる構文のみを受け入れます。
13.0 コンパイラが受け入れるのは C# 13 以下に含まれている構文だけです。
12.0 コンパイラは、C# 12 以下に含まれている構文のみを受け入れます。
11.0 コンパイラは、C# 11 以下に含まれている構文のみを受け入れます。
10.0 コンパイラは、C# 10 以下に含まれている構文のみを受け入れます。
9.0 コンパイラは、C# 9 以下に含まれている構文のみを受け入れます。
8.0 コンパイラは、C# 8.0 以下に含まれている構文のみを受け入れます。
7.3 コンパイラは、C# 7.3 以下に含まれている構文のみを受け入れます。
7.2 コンパイラは、C# 7.2 以下に含まれている構文のみを受け入れます。
7.1 コンパイラは、C# 7.1 以下に含まれている構文のみを受け入れます。
7 コンパイラは、C# 7.0 以下に含まれている構文のみを受け入れます。
6 コンパイラは、C# 6.0 以下に含まれている構文のみを受け入れます。
5 コンパイラは、C# 5.0 以下に含まれている構文のみを受け入れます。
4 コンパイラは、C# 4.0 以下に含まれている構文のみを受け入れます。
3 コンパイラは、C# 3.0 以下に含まれている構文のみを受け入れます。
ISO-2
または 2
コンパイラは、ISO/IEC 23270:2006 C# (2.0) に含まれている構文のみを受け入れます。
ISO-1
または 1
コンパイラは、ISO/IEC 23270:2003 C# (1.0/1.2) に含まれている構文のみを受け入れます。

各フレームワーク バージョンでサポートされる言語バージョンの詳細については、「言語リファレンス」セクションの 「言語バージョンの構成」 を参照してください。

言語バージョンでは使用できない機能

  • CS1738: 名前付き引数は、すべての固定引数を指定した後で指定する必要があります。
  • CS8022、CS8023、CS8024、 CS8025、CS8026、CS8059、CS8107、CS8302、CS8320、CS8370、CS8400、CS8773、CS8936、CS9058、CS9202、CS9260、CS9327: 機能は C# X では使用できません。言語バージョン Y 以上を使用してください。
  • CS8306: タプル要素名が推論されます。推論された名前で要素にアクセスするには、言語バージョン 7.1 以上を使用してください。
  • CS8314: 型 'type' の式は、C# バージョンの型 'type' のパターンでは処理できません。言語バージョン 'version' 以上を使用してください。
  • CS8371: 自動プロパティのフィールドターゲット属性は、言語バージョン 7.3 ではサポートされていません。
  • CS8401: 補間された逐語的文字列に '$@' の代わりに '@$' を使用するには、言語バージョン 8.0 以上を使用してください。
  • CS8511: 型 'type' の式は、型 'type' のパターンでは処理できません。オープン型を定数パターンと照合するには、言語バージョン 'version' 以降を使用してください。
  • CS8627: null 許容型パラメーターは、言語バージョン 'version' 以上を使用しない限り、値型または null 非許容参照型であることがわかっている必要があります。言語バージョンを変更するか、'class'、'struct'、または型制約を追加することを検討してください。
  • CS8630: C# バージョンに対する 'option' の値 'value' は無効です。言語バージョン 'version' 以降を使用してください。
  • CS8703: 修飾子 'modifier' は、C# バージョンのこの項目に対して無効です。
  • CS8704: 'type' はインターフェイス メンバー 'member' を実装しません。'type' は、非パブリック メンバーを暗黙的に実装できません。
  • CS8706: このバージョンでは機能が使用できないため、型はインターフェイス メンバーを実装できません。
  • CS8904: 無効な分散: 言語バージョン 9.0 以上を使用しない限り、型パラメーターは 'member' で不変に有効である必要があります。
  • CS8912: シールされた 'Object.ToString' を持つレコードからの継承は、C# 9.0 ではサポートされていません。
  • CS8957: 型間で共通の型が見つからなかったため、言語バージョン 8.0 では条件式が無効です。
  • CS8967: 非逐語補間文字列内の改行は、C# 10.0 ではサポートされていません。
  • CS9194: 引数を 'ref' キーワードと共に渡すことができません。'ref' 引数を 'in' パラメーターに渡すには、言語バージョン 12 以上にアップグレードします。

これらのエラーはすべて、プロジェクトが現在ターゲットとしているより新しい C# バージョンを必要とする言語機能を使用していることを示しています。 これらのエラーを解決するには、次のいずれかのオプションを使用します。

  • コンパイラが必要な言語バージョンを自動的に選択するように、ターゲット フレームワークをアップグレードします。 各ターゲット フレームワークは、既定の C# バージョンにマップされます。 たとえば、.NET 8 の既定値は C# 12、.NET 9 の既定値は C# 13、.NET 10 の既定値は C# 14 です。 完全なマッピングについては、 言語バージョンの構成エラー の表を参照してください。

  • プロジェクト ファイル内の <LangVersion> 要素を必要なバージョン以上に設定します。 たとえば、C# 12 の機能を有効にするには、プロジェクト ファイル内の<LangVersion>12</LangVersion><PropertyGroup>を追加します。

アップグレードできない場合は、エラーをトリガーした機能を避けてください。 エラー メッセージには、機能と必要なバージョンの名前が付けられます。 次の一覧では、特定のエラーに関する追加のコンテキストを示します。

  • すべての引数に明示的な名前付き引数を使用するか、C# 7.2 以降にアップグレードして末尾以外の名前付き引数 (CS1738) を使用します。
  • 推論された名前ではなく、宣言された名前でタプル要素にアクセスするか、C# 7.1 以降 (CS8306) にアップグレードします。
  • $@"...") より前のバージョンの C# の補間された逐語的文字列には、@$"..."の代わりにを使用します。
  • null 許容型パラメーターに明示的な型制約を追加するか、この要件を緩和する C# 9 以降にアップグレードします (CS8627)。
  • C# 8.0 以降にアップグレードして、null 許容注釈と null 許容コンテキスト (CS8630) を有効にします。
  • 2 つの分岐に共通の型がない場合は、条件式に明示的なキャストを追加するか、ターゲット型指定の条件式 (CS8957) を使用するために C# 9 以降にアップグレードしてください。
  • 挿入文字列式の外側に改行を移動するか、C# 11 以降 (CS8967) にアップグレードします。
  • in パラメーターに引数を渡すとき、または C# 12 以降 (ref) にアップグレードする場合は、inの代わりに キーワードを使用します。
  • 非パブリック インターフェイス メンバーを暗黙的ではなく明示的に実装するか、C# 9 以降 (CS8704) にアップグレードします。

ターゲット ランタイムは機能をサポートしていません

  • CS8021: RuntimeMetadataVersion の値が見つかりません。
  • CS8701: ターゲット ランタイムは、既定のインターフェイス実装をサポートしていません。
  • CS8702: ターゲット ランタイムは既定のインターフェイス実装をサポートしていないため、'member' は型でインターフェイス メンバーを実装できません。
  • CS8707: ターゲット ランタイムは、インターフェイスのメンバーに対して'protected'、'protected internal'、または 'private protected' アクセシビリティをサポートしていません。
  • CS8830: ターゲット ランタイムは、オーバーライドでの共変の戻り値の型をサポートしていません。
  • CS8831: ターゲット ランタイムでは、オーバーライドでの共変型はサポートされていません。
  • CS8889: ターゲット ランタイムは、拡張環境またはランタイム環境の既定の呼び出し規則をサポートしていません。
  • CS8919: ターゲット ランタイムは、インターフェイスの静的抽象メンバーをサポートしていません。
  • CS8929: ターゲット ランタイムはインターフェイスの静的抽象メンバーをサポートしていないため、'method' は型 'type' のインターフェイス メンバー 'member' を実装できません。
  • CS9041: 'type' にはコンパイラ機能 'feature' が必要です。これは、このバージョンの C# コンパイラではサポートされていません。
  • CS9064: ターゲット ランタイムは ref フィールドをサポートしていません。
  • CS9103: 'type' は、認識できない RefSafetyRulesAttribute バージョンを持つモジュールで定義され、'11' が必要です。
  • CS9171: ターゲット ランタイムでは、インライン配列型はサポートされていません。
  • CS9240: ターゲット ランタイムでは、by-ref のようなジェネリックはサポートされていません。
  • CS9328: メソッド 'method' は、ランタイム非同期で現在サポートされていない機能を使用します。'System.Runtime.CompilerServices.RuntimeAsyncMethodGenerationAttribute(false)' を使用して、メソッドをランタイム非同期からオプトアウトします。
  • CS9346: 更新では、明示的なインターフェイス実装を出力する必要があります。これは、アプリケーションを再起動しないとランタイムでサポートされていません。
  • CS9352: ターゲット ランタイムは、拡張レイアウトの種類をサポートしていません。

これらのエラーは、 <LangVersion> をアップグレードするだけでは解決されないため、言語バージョンのエラーとは異なります。 ターゲット ランタイム ( <TargetFramework> で指定) も CLR/ランタイム レベルで機能をサポートする必要があります。

プロジェクト ファイル内の <TargetFramework> を、必要な機能をサポートするバージョンにアップグレードします。 次の一覧は、どの機能でどの最小ランタイムが必要かを示しています。

  • 既定のインターフェイス実装 (protected アクセスを含む) (CS8701CS8702CS8707): .NET Core 3.0 / .NET 5 以降が必要です。
  • インターフェイス内の静的抽象メンバー (CS8919CS8929): .NET 7 以降が必要です。
  • 共変の戻り値の型 (CS8830, CS8831): .NET 5 以降が必要です。
  • Ref フィールド (CS9064): .NET 7 以降が必要です。
  • インライン配列型 (CS9171): .NET 8 以降が必要です。
  • by-ref-like generics (CS9240): .NET 9 以降が必要です。
  • 拡張レイアウトの種類 (CS9352): .NET 10 以上が必要です。
  • 拡張可能な呼び出し規則 (CS8889): .NET 5 以降が必要です。
  • ランタイム非同期機能 (CS9328): .NET 10 以上が必要です。

コンパイラ自体が必要なコンパイラ機能 (CS9041) をサポートしていない場合は、.NET SDK を更新します。 このエラーは、参照先ライブラリが、新しいコンパイラ バージョンを必要とするメタデータ機能を使用していることを示します。

コア ランタイム ライブラリへの有効な参照が存在することを確認します (CS8021)。 この警告は、通常、標準ランタイム参照なしでビルドするときに表示されます。 RuntimeMetadataVersion オプションを指定するか、System.Objectを含むアセンブリへの参照を追加します。

依存モジュールを互換性のあるコンパイラ バージョン (RefSafetyRulesAttribute) で再コンパイルすることで、バージョンの不一致を解決します。

ホット リロード中にこのエラーが発生した場合は、アプリケーションを再起動します (CS9346)。 一部のエディット コンティニュの変更では、ランタイムが必要な明示的なインターフェイス実装を動的に出力できないため、再起動が必要になります。

関数ポインターと呼び出し規約のエラー

  • CS8888: 'managed' 呼び出し規約をアンマネージ呼び出し規約指定子と組み合わせることはできません。
  • CS8889: ターゲット ランタイムは、拡張環境またはランタイム環境の既定の呼び出し規則をサポートしていません。
  • CS8890: 型 'type' が定義されていません。
  • CS8891: 型 'type' は、呼び出し規則として使用するためにパブリックである必要があります。

これらのエラーは、C# 9 で導入された 関数ポインター 宣言とその呼び出し規約指定子に関連しています。

アンマネージ指定子 (managed) も含まれる呼び出し規則指定子リストからを削除します。 managed呼び出し規則は既定であり、unmanagedCdeclStdcallThiscallなどのFastcall指定子と組み合わせることはできません。

拡張またはランタイムの既定の呼び出し規則 (CS8889) を使用するには、ターゲット フレームワークを .NET 5 以降にアップグレードします。 UnmanagedCallersOnly 属性と拡張可能な呼び出し規則の種類には、.NET Core 3.1 以前では使用できないランタイム サポートが必要です。

参照アセンブリ (CS8890) に呼び出し規則の型が存在することを確認します。 CallConvCdeclCallConvStdcallCallConvThiscallCallConvFastcallなどの呼び出し規則の種類は、System.Runtime.CompilerServicesで定義されます。 型が見つからない場合は、適切なランタイム ライブラリへの参照を追加します。

カスタム呼び出し規則の種類を public します (CS8891)。 カスタム呼び出し規則型を定義する場合は、関数ポインター型宣言で使用する public として宣言します。

試験的機能とプレビュー機能

  • CS8058: 機能 'feature' は試験段階であり、サポートされていません。'/features:feature' を使用して有効にします。
  • CS8305: 'type' は評価のみを目的としており、今後の更新で変更または削除される可能性があります。
  • CS8652: この機能は現在プレビュー段階であり、サポートされていません。プレビュー機能を使用するには、'preview' 言語バージョンを使用します。
  • CS9204: 'type' は評価のみを目的としており、今後の更新プログラムでは変更または削除される可能性があります。この診断を抑制して続行します。
  • CS9211: 'Experimental' 属性の diagnosticId 引数は有効な識別子であることが必要です。
  • CS9268: 'type' は評価目的でのみ使用され、今後の更新で変更または削除される可能性があります: 'message'。この診断を抑制して続行します。

これらの診断は、試験段階としてマークされているか、プレビュー言語バージョンでのみ使用できる機能または種類を使用していることを示します。

警告

試験的な機能は変更される可能性があります。 API が変更されたり、将来の更新プログラムで削除されたりする可能性があります。 試験的機能を含めることは、将来の発展のためのアイディアやコンセプトに関するフィードバックをライブラリの作成者が得る方法になります。 試験段階としてマークされた機能を使用する場合は、細心の注意を払ってください。

プレビュー言語機能 (<LangVersion>preview</LangVersion>) を使用するようにプロジェクト ファイルのを設定します。 プレビュー機能はまだ最終版ではなく、今後のリリースで変更される可能性があります。

特定の診断 ID を抑制して、API (CS8058、CS8305CS9204CS9268) の試験的性質を確認します。 ライブラリの作成者は、API が変更される可能性があることを示すために、System.Diagnostics.CodeAnalysis.ExperimentalAttribute を使用して API をマークします。 診断を抑制するには、 #pragma warning disable を使用するか、プロジェクト ファイルの <NoWarn> に診断 ID を追加します。

diagnosticId[Experimental]引数が有効な C# 識別子 (CS9211) であることを確認します。 識別子は、標準の名前付け規則に従う必要があります。 スペースや特殊文字を含めたり、数字で始めたりすることはできません。 System.Diagnostics.CodeAnalysis.ExperimentalAttributeを使用して、独自の試験的な機能を宣言することもできます。

構造体の初期化に関する破壊的変更

  • CS0171CS8881: コントロールが呼び出し元に返される前に、フィールド 'name' を完全に割り当てる必要があります。言語バージョン 'version' に更新して、フィールドを自動既定値にすることを検討してください。
  • CS0188CS8885: 'this' オブジェクトは、すべてのフィールドが割り当てられる前に使用できません。言語バージョン 'version' に更新して、割り当てられていないフィールドを自動既定値にすることを検討してください。
  • CS0843CS8880: コントロールが呼び出し元に返される前に、自動実装プロパティ 'name' を完全に割り当てる必要があります。言語バージョン 'version' に更新して、プロパティを自動既定値にすることを検討してください。
  • CS9014: 割り当てられていない可能性のある自動実装プロパティ 'name' の使用。言語バージョン 'version' に更新して、プロパティを自動既定値にすることを検討してください。
  • CS9015: 割り当てられていない可能性のあるフィールド 'name' の使用。言語バージョン 'version' に更新して、フィールドを自動既定値にすることを検討してください。
  • CS9016: 割り当てられていない可能性のある自動実装プロパティ 'name' の使用。言語バージョン 'version' に更新して、プロパティを自動既定値にすることを検討してください。
  • CS9017: 割り当てられていない可能性のあるフィールド 'name' が使用されています。フィールドに既定値が自動的に設定されるように、言語バージョン 'version' への更新を検討してください。

これらのエラーと警告は、 struct 型がフィールドにアクセスする前に適切に初期化されるようにするのに役立ちます。 以前のバージョンの C# では、任意のコンストラクター内の構造体内のすべてのフィールドを明示的に割り当てる必要があります。 パラメーターなしのコンストラクターは、すべてのフィールドをその既定値に初期化します。 以降のバージョンでは、すべてのコンストラクターによってすべてのフィールドが初期化されます。 フィールドが明示的に設定されているか、フィールド初期化子に設定されているか、既定値に設定されています。

すべてのstruct コンストラクターがすべてのフィールド (CS0171、CS0188、CS0843、および新しい対応する CS8880CS8881CS8885) を自動的に既定にするように、C# 11 以降にアップグレードします。 C# 11 以降、コンパイラは、コンストラクターで明示的に設定されていないフィールドを既定値に自動的に初期化します。

C# 11 (: this()CS0188CS0843) にアップグレードできない場合は、構造体コンストラクターでを使用して既定のコンストラクターを明示的に呼び出します。 この方法により、コンストラクター本体が実行される前にすべてのフィールドが既定値を受け取ります。

struct S
{
    public int AIProp { get; set; }
    public S(int i) : this() // Ensures all fields are initialized
    {
        AIProp = i;
    }
}

thisを使用する前、またはコンストラクターが戻る前にすべてのフィールドと自動プロパティを割り当てます (CS9014CS9015CS9016CS9017)。 これらの診断は、新しいコンパイラが、割り当てられる前にプロパティまたはフィールドを読み取っている可能性があることを検出したときに表示されます。 値を明示的に割り当てるか、自動既定値が警告を排除するバージョンにアップグレードします。

実装固有の属性

  • CS9269: UnscopedRefAttribute は、C# 11 以降、または net7.0 以降を対象とする場合にのみ有効です。
  • CS9271: 型 'Microsoft.CodeAnalysis.EmbeddedAttribute' は、非ジェネリック、internal、file ではなく、sealed、非 static で、パラメーターなしのコンストラクターを持ち、System.Attribute から継承し、かつ任意の型に適用できる必要があります。

これらのエラーは、コンパイラによって生成されるか、特定のランタイム バージョンに関連付けられている属性に関連します。

C# 11 および .NET 7 以降にアップグレードして、UnscopedRefAttribute (CS9269) を使用します。 この属性は、 ref 戻り値または ref struct パラメーターにスコープ付き有効期間がないことを示します。 最小要件を満たすには、言語バージョンとターゲット フレームワークの両方が必要です。

Microsoft.CodeAnalysis.EmbeddedAttribute (CS9271) を手動で宣言しないでください。 コンパイラは、必要に応じ、この属性のソースを自動的に生成します。 この名前で手動で宣言された型がある場合は、コンパイラによって生成されたバージョンと競合しないように、型を削除するか名前を変更します。