次の方法で共有


名前空間の使用と宣言に関連する警告を解決する

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

  • CS0104: エラー: 'reference' は'identifier' と 'identifier' の間のあいまいな参照です。
  • CS0116: エラー: 名前空間には、フィールド、メソッド、ステートメントなどのメンバーを直接含めることはできません。
  • CS0138: エラー: using namespace ディレクティブは名前空間に対してのみ使用できます。"type" は名前空間ではなく型です。
  • CS0430: エラー: extern エイリアス 'alias' が /reference オプションで指定されませんでした。
  • CS0431: エラー: エイリアスが型を参照しているため、エイリアス "識別子" を :: と使用できません。代わりに . を使用してください
  • CS0432: エラー: エイリアス "identifier" が見つかりません。
  • CS0434: エラー: NamespaceName2 の NamespaceName1 が NamespaceName3 の TypeName1 型と競合しています。
  • CS0438: エラー: 'module_1' の型 'type' が 'module_2' の名前空間 'namespace' と競合しています。
  • CS0439: エラー: extern エイリアス宣言は、名前空間で定義されている他のすべての要素の前に置く必要があります。
  • CS0518: エラー: 定義済みの型 'type' が定義またはインポートされていません。
  • CS0576: エラー: 名前空間 "namespace" に、エイリアス "identifier" と競合する定義が含まれています。
  • CS0687: エラー: 名前空間エイリアス修飾子 :: は、常に型または名前空間に解決するので、ここでは無効です。代わりに . を使用することを検討してください。
  • CS1022: エラー: 型または名前空間の定義、またはファイルの末尾が必要です。
  • CS1529: エラー: using 句は、extern エイリアス宣言以外の、名前空間で定義された他のすべての要素の前に使用しなければなりません。
  • CS1537エラー: using エイリアス "alias" は以前にこの名前空間で使用されています。
  • CS1671: エラー: 名前空間宣言に修飾子または属性を含めることはできません。
  • CS1679: エラー: '/reference' の extern エイリアスが無効です。'identifier' は有効な識別子ではありません。
  • CS1680: エラー: 参照エイリアス オプション 'alias=' が無効です-- ファイル名がありません。
  • CS1681: エラー: グローバルな extern エイリアスを再定義することはできません。
  • CS1730: エラー: アセンブリ属性とモジュール属性は、句と extern エイリアス宣言の使用を除き、ファイルで定義されている他のすべての要素の前に置く必要があります。
  • CS2034: エラー: extern エイリアスを宣言する /reference オプションは、ファイル名を 1 つだけ持つことができます。複数のエイリアスまたはファイル名を指定するには、複数の /reference オプションを使用します。
  • CS7000: エラー: エイリアス名の予期しない使用方法です。
  • CS7007: エラー: using static ディレクティブは型にのみ適用できます。代わりに、 using namespace ディレクティブを検討してください。
  • CS7015: エラー: 'extern alias' はこのコンテキストでは無効です。
  • CS7021: エラー: スクリプト コードで名前空間を宣言できません。
  • CS8083: エラー: エイリアスで修飾された名前が式ではありません。
  • CS8085: エラー: "using static" ディレクティブはエイリアスの宣言には使用できません。
  • CS8914: エラー: グローバル using ディレクティブを名前空間宣言で使用することはできません。
  • CS8915: エラー: グローバル using ディレクティブは、すべての非グローバル using ディレクティブの前に指定する必要があります。
  • CS8954: エラー: ソース ファイルには、ファイル スコープの名前空間宣言を 1 つだけ含めることができます。
  • CS8955: エラー: ソース ファイルには、ファイル スコープと通常の名前空間宣言の両方を含めできません。
  • CS8956: エラー: ファイル スコープの名前空間は、ファイル内の他のすべてのメンバーの前に置く必要があります。
  • CS9130: エラー: 使用するエイリアスを ref 型にすることはできません。
  • CS9131: エラー: unsafe にできるのは using エイリアスのみです。
  • CS9132: エラー: エイリアスを null 許容の参照型にすることはできません。
  • CS9133: エラー: static 修飾子は unsafe 修飾子より前に指定する必要があります。
  • CS9162: 型は "using static" では無効です。使用できるのは、クラス、構造体、インターフェイス、列挙型、デリゲート、または名前空間だけです。

コンパイラ警告は以下のとおりです。

  • CS0105: 警告: "namespace" の using ディレクティブは、この名前空間で既に使用されています。
  • CS0435: 警告: 'assembly' の名前空間 'namespace' が、'assembly' のインポートされた型 'type' と競合しています。'assembly' で定義されている名前空間の使用。
  • CS0436: 警告: 'assembly' の型 'type' が、'assembly' のインポートされた型 'type2' と競合しています。'assembly' で定義されている型の使用。
  • CS0437: 警告: 'assembly2' の型 'type' は、'assembly1' のインポートされた名前空間 'namespace' と競合します。'assembly' で定義されている型の使用。
  • CS0440: 警告: global はエイリアスではなく常にグローバル名前空間を参照するため、global:: という名前のエイリアスを定義することはお勧めしません。
  • CS8019: インフォ: 不要な using ディレクティブ。
  • CS8020: 情報: 未使用の extern エイリアス。
  • CS8933: 情報: この using ディレクティブは、以前に global using として使用されています。

これらのエラーと警告は、 using ディレクティブ、名前空間宣言、または型と名前空間の間の名前付けの競合に関する問題を示しています。 次のセクションでは、これらのエラーとその修正方法について説明します。

using ディレクティブ

次のエラーは、 using ディレクティブに関連しています。

  • CS0105: 'namespace' の using ディレクティブは、この名前空間に以前に表示されました。
  • CS0430: extern エイリアス 'alias' が /reference オプションで指定されませんでした。
  • CS0439: extern エイリアス宣言は、名前空間で定義されている他のすべての要素の前に置く必要があります。
  • CS1529: using 句は、extern エイリアス宣言を除き、名前空間で定義されている他のすべての要素の前に置く必要があります。
  • CS1679: '/reference' の extern エイリアスが無効です。'identifier' は有効な識別子ではありません。
  • CS1680: 参照エイリアス オプション 'alias=' が無効です。ファイル名がありません。
  • CS1681: グローバルな extern エイリアスを再定義することはできません。
  • CS1730: アセンブリ属性とモジュール属性は、句と extern エイリアス宣言の使用を除き、ファイルで定義されている他のすべての要素の前に置く必要があります。
  • CS2034: extern エイリアスを宣言する /reference オプションは、ファイル名を 1 つだけ持つことができます。複数のエイリアスまたはファイル名を指定するには、複数の /reference オプションを使用します。
  • CS7015: 'extern alias' はこのコンテキストでは無効です。
  • CS8019: 不要な using ディレクティブ。
  • CS8020: 未使用の extern エイリアスです。
  • CS8933: using ディレクティブは、以前はグローバル using として表示されました。

これらの診断を管理する規則については、 using ディレクティブextern エイリアス 言語リファレンスを参照してください。 次のような修正プログラムが考えられます。

  • すべての using ディレクティブをファイルの先頭または名前空間宣言の先頭に移動します。 C# 言語では、 using ディレクティブが名前空間内の他の要素の前に来る必要があります (CS1529)。
  • すべての extern alias 宣言を using ディレクティブの前に移動します。 この言語では、 using ディレクティブ (CS0439CS7015) を含む他のすべての要素の前に extern エイリアスが必要です。
  • すべてのアセンブリおよびモジュール レベルの属性を、 using 句と extern alias 宣言の後、型宣言の前に移動します。 属性はディレクティブに従う必要がありますが、型 (CS1730) の前に置く必要があります。
  • ソース コード内のすべての extern alias 宣言に、プロジェクトの 参照オプションで対応するエイリアスが定義されていることを確認します。 コンパイラは、指定されていないエイリアス (CS0430) を解決できません。
  • 1 つのオプションで複数のエイリアスを組み合わせるのではなく、extern エイリアスごとに個別の /reference オプションを使用します。 コンパイラには、参照オプション (CS2034) ごとに 1 つのエイリアスが必要です。
  • /reference オプションのエイリアスが有効な C# 識別子であることを確認します。 エイリアスは識別子の名前付け規則 (CS1679) に従う必要があります。 エイリアス参照オプションでは = 記号の後にファイル名を含めます。 コンパイラは、エイリアスが参照するアセンブリを認識する必要があります (CS1680)。
  • global extern エイリアスを再定義しないでください。 global は、すべての未エイリアス参照 (CS1681) を参照する定義済みのエイリアスです。
  • 重複する using ディレクティブを削除します。 コンパイラは、同じ名前空間が複数回インポートされると警告します (CS0105CS8019CS8933)。
  • 未使用の extern alias 宣言を削除します。 extern エイリアスが宣言されているが、コードで参照されていない場合、コンパイラは診断を発行します (CS8020)。

静的ディレクティブの使用

次のエラーは、 using static ディレクティブに関連しています。

  • CS0138: using namespace ディレクティブは名前空間にのみ適用できます。'type' は名前空間ではない型です。
  • CS7007: using static ディレクティブは型にのみ適用できます。代わりに、using namespace ディレクティブを検討してください。
  • CS9133: static 修飾子はunsafe 修飾子の前に配置する必要があります。
  • CS9162: 型が 'using static' に対して有効ではありません。使用できるのは、クラス、構造体、インターフェイス、列挙型、デリゲート、または名前空間だけです。

これらの診断に関する規則については、using static ディレクティブ の言語リファレンスを参照してください。 次のような修正プログラムが考えられます。

  • 型のメンバーを直接インポートするときに static 修飾子を追加します。これは、 static を省略すると、型ではなく名前空間をインポートするコンパイラに指示されるためです (CS0138)。
  • staticは名前空間ではなく型にのみ適用できるため、名前空間のインポート時にusing static修飾子を削除します (CS7007)。 他の型が静的インポート (using static) の有効なターゲットではないので、 ディレクティブのターゲットがクラス、構造体、インターフェイス、列挙型、またはデリゲートであることを確認します。
  • 言語には特定の順序 (static) の修飾子が必要であるため、両方を組み合わせるときに、unsafe修飾子を修飾子の前に配置します。

グローバルな using ディレクティブ

次のエラーは、 global using ディレクティブに関連しています。

  • 名前空間宣言でグローバル using ディレクティブを使用することはできません。
  • CS8915: グローバル using ディレクティブは、グローバル以外のすべての using ディレクティブの前に置く必要があります。

これらの診断を定義する規定については、グローバルusingディレクティブの言語のリファレンスを参照してください。 次のような修正プログラムが考えられます。

  • グローバル using はプロジェクト全体に適用され、名前空間にスコープを設定できないため、 global using ディレクティブを名前空間宣言の外部からファイル スコープに移動します (CS8914)。
  • グローバルでないglobal using ディレクティブの前にすべてのusingディレクティブをファイル内に配置します。これは、言語でローカル ディレクティブの前にグローバル ディレクティブが必要であるためです (CS8915)。
  • static global using ディレクティブは、ファイル ローカル型を参照できないことに注意してください。

ファイルスコープ名前空間

次のエラーは、ファイル スコープの名前空間に関連しています。

  • CS8954: ソース ファイルには、ファイル スコープの名前空間宣言を 1 つだけ含めることができます。
  • CS8955: ソース ファイルには、ファイル スコープと通常の名前空間宣言の両方を含めできません。
  • CS8956: ファイル スコープの名前空間は、ファイル内の他のすべてのメンバーの前に置く必要があります。

これらの診断を管理する規則については、 ファイル スコープの名前空間 言語リファレンスを参照してください。 次のような修正プログラムが考えられます。

  • ファイルスコープの名前空間宣言は 1 つのファイルにつき 1 つだけ使用します。この言語では、ファイル内のすべての型に名前空間を設定できるのは 1 つのファイル スコープ名前空間のみであるためです (CS8954)。
  • 言語では両方のスタイルの混在が許可されないため、1 つのファイル内でファイル スコープまたはブロック スコープの名前空間宣言を選択します (CS8955)。
  • 型を宣言する前に名前空間を確立する必要があるため、ファイル スコープの名前空間宣言を型宣言の前に移動します (CS8956)。

エイリアスの修飾子

次のエラーはエイリアス修飾子に関連しています。

  • CS0431: エイリアスは型を参照するため、 :: でエイリアス 'identifier' を使用できません。代わりに . を使用してください。
  • CS0432: エイリアス 'identifier' が見つかりません。
  • CS0440: globalという名前のエイリアスを定義することは、global::は常にエイリアスではなくグローバル名前空間を参照するため、不適切な方法です。
  • CS0687: ::名前空間エイリアス修飾子は常に型または名前空間に解決されるため、ここでは無効です。代わりに.を使用することを検討してください。
  • CS7000: エイリアス名の予期しない使用。
  • CS8083: エイリアス指定の名前は式ではありません。

これらの診断を管理する規則については、 名前空間エイリアス修飾子 の言語リファレンスを参照してください。 次のような修正プログラムが考えられます。

  • 型エイリアスのメンバーにアクセスする場合、 :: 演算子を . 演算子に置き換えます。これは、 :: 修飾子は型エイリアスではなく名前空間エイリアスに対してのみ有効であるためです (CS0431CS0687)。
  • コンパイラが未定義のエイリアス (using) を解決できないため、参照しているエイリアスが extern alias ディレクティブまたはで宣言されていることを確認します。
  • エイリアス修飾子は、型または名前空間名が必要なコンテキストでのみ使用します。エイリアス修飾名は式として有効ではありません (CS7000CS8083)。
  • globalはグローバル名前空間を参照するために予約されており、再定義できないため、globalではなくエイリアスに別の名前を選択します (CS0440)。

エイリアス制限の使用

次のエラーは、エイリアスの使用に関する制限に関連しています。

  • CS0576: 名前空間 'namespace' には、エイリアス 'identifier' と競合する定義が含まれています。
  • CS1537: この名前空間には、以前に using エイリアス 'alias' が存在していました。
  • CS8085: 'using static' ディレクティブを使用してエイリアスを宣言することはできません。
  • CS9130: エイリアスを使用して ref 型にすることはできません。
  • CS9131: unsafeできるのは、using エイリアスのみです。
  • CS9132: エイリアスを使用して null 許容参照型にすることはできません。

これらの診断を規則するルールについては、using alias 言語リファレンスガイドを参照してください。 次のような修正プログラムが考えられます。

  • コンパイラはエイリアスと既存の定義 (CS0576) を区別できないため、スコープ内の既存の型または名前空間名と競合しないエイリアスの一意の名前を選択します。
  • 重複するエイリアス宣言によってあいまいさが生じるため、各エイリアス名は名前空間内で 1 回だけ使用します (CS1537)。
  • エイリアスと静的インポートは相互に排他的であるため、エイリアスの宣言時に static 修飾子を削除します。メンバーのインポートには using static を使用するか、エイリアスを作成する using Alias = を使用しますが、両方を一緒に作成することはできません (CS8085)。

C# 12 以降では、エイリアスの使用に次の制限が適用されます。

  • using エイリアスで refin、または out 修飾子を使用しないでください。これらのパラメーター修飾子は、型エイリアスのコンテキスト (CS9130) では無効です。
  • unsafe修飾子は、ポインター型を参照するエイリアス、またはusing static ディレクティブでのみ使用します。これは、エイリアスまたは静的インポートを使用しないunsafeが許可されていないためです (CS9131)。
  • null 許容参照型は直接エイリアス化できないため、参照型にエイリアスを作成するときは、null 非許容参照型を使用します (CS9132)。

名前空間宣言

次のエラーは、名前空間宣言規則に関連しています。

  • CS0116: 名前空間には、フィールド、メソッド、ステートメントなどのメンバーを直接含めることはできません。
  • CS1022: 型または名前空間の定義、またはファイルの末尾が必要です。
  • CS1671: 名前空間宣言に修飾子または属性を指定することはできません。
  • CS7021: スクリプト コードで名前空間を宣言できません。

これらの診断を管理する規則については、C# プログラム言語リファレンスの名前空間キーワードと一般的な構造を参照してください。 次のような修正プログラムが考えられます。

  • 名前空間には型宣言、入れ子になった名前空間、および using ディレクティブ (CS0116) のみを含めることができるため、名前空間内ではなく、すべてのメソッド、フィールド、およびプロパティが型 (クラス、構造体、レコード、またはインターフェイス) 内で宣言されていることを確認します。
  • ソース ファイルにおける中かっこの不一致を確認してください。名前空間や型定義の後に余分な右中かっこがあると、ファイルの末尾でコンパイラが予期しない内容に遭遇したときにエラーが発生します (CS1022)。
  • 名前空間は publicprivateなどの修飾子をサポートしていないため、名前空間宣言からアクセス修飾子または属性を削除します。属性を適用できません (CS1671)。
  • スクリプト コードは名前空間宣言 (.csx) をサポートしていない 1 つの実行コンテキストで評価されるため、C# スクリプト ファイル (.cs) から通常のソース ファイル () に名前空間宣言を移動します。

名前空間と型の名前付けの競合

次のエラーと警告は、名前空間と型の間の名前付けの競合に関連しています。

  • CS0104: 'reference' は、'identifier' と 'identifier' の間のあいまいな参照です。
  • CS0434: NamespaceName1 in NamespaceName2 が NamespaceName3 の TypeName1 型と競合しています。
  • CS0435: 'assembly' の名前空間 'namespace' が、'assembly' のインポートされた型 'type' と競合しています。'assembly' で定義されている名前空間の使用。
  • CS0436: 'assembly' の型 'type' が、'assembly' のインポートされた型 'type2' と競合しています。'assembly' で定義されている型の使用。
  • CS0437: 'assembly2' の型 'type' は、'assembly1' のインポートされた名前空間 'namespace' と競合します。'assembly' で定義されている型の使用。
  • CS0438: 'module_1' の型 'type' は、'module_2' の名前空間 'namespace' と競合します。

これらの診断を管理する規則については、 using ディレクティブextern エイリアス名前空間エイリアス修飾子 の言語リファレンスを参照してください。 次のような修正プログラムが考えられます。

  • コードが複数のインポートされた名前空間に存在する名前を参照する場合は、完全修飾名または名前空間 エイリアス を使用します。
  • コンパイラは、 using ディレクティブ (CS0104) によってインポートされた 2 つ以上の名前空間に同じ名前が表示される場合に、使用する型を判断できません。
  • インポートされた型とインポートされた入れ子になった名前空間が同じ完全修飾名を共有する場合は、型または名前空間の名前を変更します。 名前が参照されている場合、コンパイラはそれらを区別できません (CS0434CS0438)。

名前の競合の警告を解決するには、競合する宣言の 1 つを名前変更するか、別の名前空間を使用するか、不要なアセンブリ参照を削除するか、 extern エイリアス を使用して 2 つの定義の間であいまいさを解消します。 コンパイラは、インポートされた型 (CS0435) に対してローカルに定義された名前空間、インポートされた型 (CS0436)、またはインポートされた名前空間 (CS0437) に対してローカルに定義された型を使用して、これらの競合を自動的に解決しますが、警告は対処すべき混乱の原因の可能性を示します。

定義済みの型のインポート

次のエラーは、定義済みの型定義が見つからない場合に関連しています。

  • CS0518: 定義済みの型 'type' が定義またはインポートされていません。

この警告は、明示的な ビルド 操作または 再構築 操作中にのみ報告されます。 これは、IntelliSense 診断の一部として IDE での入力中には表示されません。 つまり、フィールドを使用するか削除して警告を修正した場合、プロジェクトをもう一度ビルドまたはリビルドするまで、警告がエラー一覧に保持される可能性があります。

この診断を管理する規則については、 NoStandardLib コンパイラ オプション 言語リファレンスを参照してください。

プロジェクトが正しい .NET ランタイムをターゲットにしていることを確認します。 System.Int32System.Stringなどの定義済みの型は、ランタイム ライブラリから取得されます。 <TargetFramework>指定が正しくないか、不足しているため、コンパイラはこれらの型 (CS0518) を検出できません。 <TargetFramework> ファイルの.csproj プロパティで、目的のランタイム (net10.0 など) が指定されていることを確認します。 独自の名前空間を定義する場合を除き、System コンパイラ オプションを指定しないでください。 このオプションでは、すべての定義済み型 (CS0518) を定義する標準ライブラリをインポートできなくなります。 エラーが解決しない場合は、Visual Studio でプロジェクトを再読み込みするか、 obj フォルダーと bin フォルダーを削除してプロジェクトを再構築するか、.NET ランタイム (CS0518) を再インストールしてみてください。