Freigeben über


Beheben von Warnungen im Zusammenhang mit der Verwendung und Deklarierung von Namespaces

In diesem Artikel werden die folgenden Compilerfehler behandelt:

  • CS0104: Fehler: 'Referenz' ist ein mehrdeutiger Verweis zwischen 'Bezeichner' und 'Bezeichner'.
  • CS0116: Fehler: Ein Namespace darf keine Elemente wie Felder, Methoden oder Anweisungen direkt enthalten.
  • CS0138: Fehler: Eine „using“-Namespaceanweisung kann nur auf Namespaces angewandt werden. „type“ ist ein Typ und kein Namespace.
  • CS0430: Fehler: Der externe Alias "alias" wurde in einer /reference-Option nicht angegeben.
  • CD0431: Fehler: Der Alias „Bezeichner“ kann nicht mit :: verwendet werden, da der Alias auf einen Typ verweist. Verwenden Sie stattdessen ..
  • CS0432: Fehler: Alias „identifier“ wurde nicht gefunden.
  • CS0434: Fehler: Der Namespace "NamespaceName1" in "NamespaceName2" steht im Konflikt mit dem Typ "TypeName1" in "NamespaceName3".
  • CS0438: Fehler: Der Typ "type" in "module_1" tritt mit dem Namespace "namespace" in "module_2" in Konflikt.
  • CS0439: Fehler: Eine externe Aliasdeklaration muss allen anderen im Namespace definierten Elementen vorausgehen.
  • CS0518: Fehler: Der vordefinierte Typ "Type" ist nicht definiert oder importiert.
  • CS0576: Fehler: Der Namespace „Namespace“ enthält eine Definition, die mit dem Alias „Bezeichner“ in Konflikt steht.
  • CS0687: Fehler: Der Qualifizierer :: für den Namespacealias wird immer zu einem Typ oder Namespace aufgelöst und ist somit an dieser Stelle ungültig. Erwägen Sie stattdessen die Verwendung von ..
  • CS1022: Fehler: Typ, Namespace-Definition oder Ende der Datei erwartet.
  • CS1529: Fehler: Eine „using“-Klausel muss allen anderen im Namespace definierten Elementen vorangehen, mit Ausnahme externer Aliasdeklarationen.
  • CS1537: Fehler: Der using-Alias „alias“ ist bereits zuvor in diesem Namespace aufgetreten.
  • CS1671: Fehler: Eine Namespacedeklaration darf keine Modifizierer oder Attribute aufweisen.
  • CS1679: Fehler: Ungültiger externer Alias für "/reference"; "Bezeichner" ist kein gültiger Bezeichner.
  • CS1680: Fehler: Ungültige Verweisaliasoption: 'alias=' – fehlender Dateiname.
  • CS1681: Fehler: Sie können den globalen externen Alias nicht neu definieren.
  • CS1730: Fehler: Assembly- und Modulattribute müssen allen anderen In einer Datei definierten Elementen vorausgehen, mit Ausnahme von Klauseln und externen Aliasdeklarationen.
  • CS2034: Fehler: Eine /reference-Option, die einen externen Alias deklariert, kann nur einen Dateinamen aufweisen. Verwenden Sie mehrere /reference-Optionen, um mehrere Aliase oder Dateinamen anzugeben.
  • CS7000: Fehler: Unerwartete Verwendung eines Aliasnamens.
  • CS7007: Fehler: Eine using static Direktive kann nur auf Typen angewendet werden. Erwägen Sie stattdessen eine using namespace Direktive.
  • CS7015: Fehler: "externer Alias" ist in diesem Kontext ungültig.
  • CS7021: Fehler: Namespace kann im Skriptcode nicht deklariert werden.
  • CS8083: Fehler: Ein „alias“-qualifizierter Name ist kein Ausdruck.
  • CS8085: Fehler: Eine „using static“-Anweisung kann nicht zum Deklarieren eines Alias verwendet werden.
  • CS8914: Fehler: Eine „global using“-Anweisung kann nicht in einer Namespacedeklaration verwendet werden.
  • CS8915: Fehler: Eine „global using“-Anweisung muss allen nicht-“global using“-Anweisungen vorangehen.
  • CS8954: Fehler: Quelldatei darf nur eine Namespacedeklaration mit Dateibereich enthalten.
  • CS8955: Fehler: Quelldatei kann sowohl dateibezogene als auch normale Namespacedeklarationen nicht enthalten.
  • CS8956: Fehler: Dateibereichsnamespace muss allen anderen Membern in einer Datei vorausgehen.
  • CS9130: Fehler: Der „using“-Alias darf nicht vom Typ ref sein.
  • CS9131: Fehler: Nur ein „using“-Alias darf unsafe sein.
  • CS9132: Fehler: Der „using“-Alias darf kein Nullable-Verweistyp sein.
  • CS9133: Fehler: Der Modifizierer static muss dem Modifizierer unsafe vorangestellt sein.
  • CS9162: Typ ist für „using static“ ungültig. Es kann nur eine Klasse, Struktur, Schnittstelle, Enumeration, Delegat oder Namespace verwendet werden.

Und die folgenden Compilerwarnungen:

  • CS0105: Warnung: Die „using“-Anweisung für „namespace“ ist bereits vorher in diesem Namespace aufgetreten.
  • CS0435: Warnung: Der Namespace "namespace" in "assembly" ist in Konflikt mit dem importierten Typ "type" in "assembly". Verwenden des in "assembly" definierten Namespaces.
  • CS0436: Warnung: Der Typ "Typ" in "assembly" steht im Konflikt mit dem importierten Typ "type2" in "assembly". Verwenden des Typs, der in "assembly" definiert ist.
  • CS0437: Warnung: Der Typ "type" in "assembly2" ist in Konflikt mit dem importierten Namespace "namespace" in "assembly1". Verwenden des typs, der in "assembly" definiert ist.
  • CS0440: Warnung: Es sollte kein Alias mit dem Namen global definiert werden, da global:: immer ein Verweis auf den globalen Namespace und nicht auf einen Alias ist.
  • CS8019: Hinweis: Überflüssige „using“-Anweisung.
  • CS8020: Info: Nicht verwendeter externer Alias.
  • CS8933: Information: Die „using“-Anweisung wurde zuvor bereits als „global using“ verwendet.

Diese Fehler und Warnungen deuten auf Probleme mit using Direktiven, Namespacedeklarationen oder Namenskonflikten zwischen Typen und Namespaces hin. In den folgenden Abschnitten werden diese Fehler und deren Behebung beschrieben.

Using-Anweisung

Die folgenden Fehler beziehen sich auf using Direktiven:

  • CS0105: Die Using-Direktive für "namespace" erschien zuvor in diesem Namespace.
  • CS0430: Der externe alias 'alias' wurde nicht in einer /reference-Option angegeben.
  • CS0439: Eine externe Aliasdeklaration muss allen anderen im Namespace definierten Elementen vorausgehen.
  • CS1529: Eine Using-Klausel muss allen anderen Elementen vorausgehen, die im Namespace definiert sind, mit Ausnahme von externen Aliasdeklarationen.
  • CS1679: Ungültiger externer Alias für "/reference"; "Bezeichner" ist kein gültiger Bezeichner.
  • CS1680: Ungültige Verweisaliasoption: 'alias=' – fehlender Dateiname.
  • CS1681: Sie können den globalen externen Alias nicht neu definieren.
  • CS1730: Assembly- und Modulattribute müssen allen anderen In einer Datei definierten Elementen vorausgehen, mit Ausnahme von Klauseln und externen Aliasdeklarationen.
  • CS2034: Eine /reference-Option, die einen externen Alias deklariert, kann nur einen Dateinamen aufweisen. Verwenden Sie mehrere /reference-Optionen, um mehrere Aliase oder Dateinamen anzugeben.
  • CS7015: 'extern alias' ist in diesem Kontext nicht gültig.
  • CS8019: Unnötige Verwendung der Direktive.
  • CS8020: Nicht verwendeter externer Alias.
  • CS8933: Die verwendungsdirektive erschien zuvor als globale Verwendung.

Informationen zu den Regeln, die diese Diagnose regeln, finden Sie in der Verwendungsdirektive und der externen Aliassprache . Mögliche Korrekturen umfassen:

  • Verschieben Sie alle using Direktiven an den Anfang der Datei oder an den Anfang der Namespacedeklaration. Für die C#-Sprache müssen using Direktiven vor anderen Elementen in einem Namespace (CS1529) erfolgen.
  • Verschieben Sie alle extern alias Deklarationen vor alle using Direktiven. Externe Aliase müssen in der Sprache vor allen anderen Elementen stehen, einschließlich using-Direktiven (CS0439, CS7015).
  • Verschieben Sie alle Attribute auf Assembly- und Modulebene hinter die using-Klauseln und extern alias-Deklarationen, aber vor die Typdeklarationen. Attribute müssen Direktiven folgen und Typen vorausgehen (CS1730).
  • Stellen Sie sicher, dass jede extern alias Deklaration im Quellcode einen entsprechenden Alias enthält, der in den Referenzoptionen Ihres Projekts definiert ist. Der Compiler kann keinen Alias auflösen, der nicht angegeben wurde (CS0430).
  • Verwenden Sie eine separate /reference Option für jeden externen Alias, anstatt mehrere Aliase in einer einzigen Option zu kombinieren. Der Compiler erfordert einen Alias pro Referenzoption (CS2034).
  • Stellen Sie sicher, dass der Alias in Ihrer /reference Option ein gültiger C#-Bezeichner ist. Der Alias muss bezeichnerbenennungsregeln (CS1679) entsprechen. Fügen Sie einen Dateinamen in Ihrer Aliasverweis-Option nach dem =-Zeichen hinzu. Der Compiler muss wissen, auf welche Assembly der Alias verweist (CS1680).
  • Versuchen Sie nicht, den global externen Alias neu zu definieren. global ist ein vordefinierter Alias, der auf alle nichtaliasierten Verweise (CS1681) verweist.
  • Entfernen Sie doppelte using Direktiven. Der Compiler warnt, wenn derselbe Namespace mehrmals importiert wird (CS0105, CS8019, CS8933).
  • Entfernen Sie nicht verwendete extern alias Deklarationen. Der Compiler gibt eine Diagnosemeldung aus, wenn ein externer Alias deklariert, aber nie in Ihrem Code referenziert wird (CS8020).

Die "using static"-Anweisung

Die folgenden Fehler beziehen sich auf using static Direktiven:

  • CS0138: Eine using-Namespacedirektive kann nur auf Namespaces angewendet werden; "type" ist ein Typ, kein Namespace.
  • CS7007: Eine using static Direktive kann nur auf Typen angewendet werden. Erwägen Sie stattdessen eine using namespace Direktive.
  • CS9133: static Modifizierer muss dem unsafe Modifizierer vorangestellt sein.
  • CS9162: Typ ist für "using static" ungültig. Es kann nur eine Klasse, Struktur, Schnittstelle, Enumeration, Delegat oder Namespace verwendet werden.

Informationen zu den Regeln, die diese Diagnosen regeln, finden Sie in der Verwendung der Sprachreferenz für statische Direktiven . Mögliche Korrekturen umfassen:

  • Fügen Sie beim direkten Importieren der Member eines Typs den Modifizierer static hinzu, da das Weglassen von static den Compiler anweist, einen Namespace anstelle eines Typs zu importieren (CS0138).
  • Entfernen Sie den static Modifizierer beim Importieren eines Namespaces, da using static nur auf Typen angewendet werden kann, nicht auf Namespaces (CS7007). Stellen Sie sicher, dass das Ziel einer using static Direktive eine Klasse, Struktur, Schnittstelle, Enumeration oder Stellvertretung ist, da andere Typen keine gültigen Ziele für statische Importe (CS9162) sind.
  • Platzieren Sie den static Modifizierer vor dem unsafe Modifizierer, wenn beide kombiniert werden, da für die Sprache Modifizierer in einer bestimmten Reihenfolge (CS9133) erforderlich sind.

Globale using-Anweisung

Die folgenden Fehler beziehen sich auf global using Direktiven:

  • CS8914: Eine globale Using-Direktive kann nicht in einer Namespacedeklaration verwendet werden.
  • CS8915: Eine globale Using-Direktive muss allen nicht globalen Using-Direktiven vorangehen.

Informationen zu den Regeln, die diese Diagnose regeln, finden Sie in der globalen Referenz zur Direktivensprache . Mögliche Korrekturen umfassen:

  • Verschieben Sie global using Direktiven außerhalb einer Namespacedeklaration in den Dateibereich, da globale using-Anweisungen projektweit angewendet werden und nicht auf einen Namespace beschränkt werden können (CS8914).
  • Platzieren Sie alle global using Direktiven vor nicht-globalen using Direktiven in der Datei, da die Sprache erfordert, dass globale Direktiven den lokalen (CS8915) vorangehen.
  • Beachten Sie, dass eine static global using Direktive nicht auf einen dateilokalen Typ verweisen kann.

Dateibezogener Namespace

Die untenstehenden Fehler beziehen sich auf Datei-basierte Namespaces:

  • CS8954: Die Quelldatei kann nur eine im Dateibereich befindliche Namespacedeklaration enthalten.
  • CS8955: Quelldatei kann sowohl dateibezogene als auch normale Namespacedeklarationen nicht enthalten.
  • CS8956: Der dateibezogene Namespace muss allen anderen Membern in einer Datei vorausgehen.

Informationen zu den Regeln, die diese Diagnosen steuern, finden Sie in der Sprachreferenz zum datei-umfassenden Namespace. Mögliche Korrekturen umfassen:

  • Verwenden Sie pro Datei nur eine Namespacedeklaration mit Dateibereich, da in der Sprache nur ein einzelner Namespace mit Dateibereich für alle Typen in einer Datei (CS8954) festgelegt werden kann.
  • Wählen Sie innerhalb einer einzelnen Datei entweder Dateibereichs- oder Blockbereichs-Namespace-Deklarationen aus, da die Sprache das Mischen beider Stile (CS8955) nicht zulässt.
  • Verschieben Sie die Dateibereich-Namensdeklaration vor die Typdeklarationen, da der Namespace eingerichtet werden muss, bevor Typen deklariert werden (CS8956).

Aliasqualifizierer

Die folgenden Fehler beziehen sich auf den Aliasqualifizierer:

  • CS0431: Der Alias "Identifier" :: kann nicht verwendet werden, da der Alias auf einen Typ verweist. Verwenden Sie . stattdessen.
  • CS0432: Alias 'Identifier' wurde nicht gefunden.
  • CS0440: Das Definieren eines Alias namens global wird schlecht empfohlen, da global:: immer auf den globalen Namespace und nicht auf einen Alias verwiesen wird.
  • CS0687: Der Namespacealiasqualifizierer :: wird immer in einen Typ oder Namespace aufgelöst, daher ist dies hier unzulässig. Erwägen Sie stattdessen die Verwendung . .
  • CS7000: Unerwartete Verwendung eines aliasierten Namens.
  • CS8083: Ein aliasqualifizierter Name ist kein Ausdruck.

Informationen zu den Regeln, die diese Diagnose regeln, finden Sie in der Namespacealias-Qualifizierersprachenreferenz . Mögliche Korrekturen umfassen:

  • Ersetzen Sie den :: Operator durch den . Operator, wenn Sie auf Member eines Typalias zugreifen, da der :: Qualifizierer nur für Namespacealiasen gültig ist, nicht typspezifische Aliase (CS0431, CS0687).
  • Stellen Sie sicher, dass der Alias, auf den Sie verweisen, mit einer using Direktive deklariert wird oder extern alias, da der Compiler keinen nicht definierten Alias auflösen kann (CS0432).
  • Verwenden Sie den Aliasqualifizierer nur in Kontexten, in denen ein Typ oder Namespacename erwartet wird, da aliasqualifizierte Namen nicht als Ausdrücke gültig sind (CS7000, CS8083).
  • Wählen Sie einen anderen Namen für Ihren Alias anstelle von global, da global für den Verweis auf den globalen Namespace reserviert ist und nicht neu definiert werden kann (CS0440).

Verwenden von Aliaseinschränkungen

Die folgenden Fehler beziehen sich auf Einschränkungen bei der Verwendung von Aliasen:

  • CS0576: Namespace "namespace" enthält eine Definition, die mit dem Alias "Identifier" in Konflikt stehen soll.
  • CS1537: Der using-Alias "alias" wurde zuvor in diesem Namespace angezeigt.
  • CS8085: Eine "using static"-Direktive kann nicht zum Deklarieren eines Alias verwendet werden.
  • CS9130: Ein Alias kann nicht als ein ref Typ verwendet werden.
  • CS9131: Nur ein Using-Alias kann unsafe sein.
  • CS9132: Die Verwendung von Alias kann kein nullwertbarer Verweistyp sein.

Informationen zu den Regeln, die diese Diagnose steuern, finden Sie in der Verwendung von Alias-Sprachreferenz. Mögliche Korrekturen umfassen:

  • Wählen Sie einen eindeutigen Namen für Ihren Alias aus, der keinen Konflikt mit vorhandenen Typ- oder Namespacenamen im Bereich hat, da der Compiler nicht zwischen dem Alias und der vorhandenen Definition (CS0576) unterscheiden kann.
  • Verwenden Sie jeden Aliasnamen nur einmal innerhalb eines Namespaces, da doppelte Aliasdeklarationen Mehrdeutigkeit (CS1537) erzeugen.
  • Entfernen Sie den static Modifizierer beim Deklarieren eines Alias, da Aliase und statische Importe sich gegenseitig ausschließen – verwenden Sie entweder using static zum Importieren von Mitgliedern oder using Alias = zum Erstellen eines Alias, jedoch nicht beides (CS8085).

Ab C# 12 gelten die folgenden Einschränkungen für die Verwendung von Aliasen:

  • Verwenden Sie keine ref, in oder out Modifizierer in einer using-Anweisung, da diese Parametermodifizierer in Typ-Alias-Kontexten (CS9130) nicht gültig sind.
  • Verwenden Sie den unsafe Modifizierer nur für Aliase, die auf Zeigertypen oder direktiven using static verweisen, da unsafe ohne einen Alias oder statischen Import (CS9131) nicht zulässig ist.
  • Verwenden Sie beim Erstellen eines Alias für einen Verweistyp einen nicht nullfähigen Verweistyp, da nullable Verweistypen nicht direkt aliasiert werden können (CS9132).

Namespacedeklarationen

Die folgenden Fehler beziehen sich auf Namespacedeklarationsregeln:

  • CS0116: Ein Namespace kann keine Elemente wie Felder, Methoden oder Anweisungen direkt enthalten.
  • CS1022: Typ- oder Namespacedefinition oder Dateiende erwartet.
  • CS1671: Eine Namespacedeklaration darf keine Modifizierer oder Attribute aufweisen.
  • CS7021: Namespace kann im Skriptcode nicht deklariert werden.

Lesen Sie das Namespace-Schlüsselwort und die allgemeine Struktur einer C#-Programmsprachenreferenz für die Regeln, die diese Diagnose steuern. Mögliche Korrekturen umfassen:

  • Stellen Sie sicher, dass alle Methoden, Felder und Eigenschaften innerhalb eines Typs (Klasse, Struktur, Datensatz oder Schnittstelle) und nicht direkt innerhalb eines Namespace deklariert werden, da Namespaces nur Typdeklarationen, geschachtelte Namespaces und using Direktiven (CS0116) enthalten können.
  • Überprüfen Sie die Quelldatei auf nicht übereinstimmende geschweifte Klammern, da eine zusätzliche abschließende Klammer nach einem Namespace oder einer Typdefinition einen Fehler verursacht, wenn der Compiler am Ende der Datei auf unerwartete Inhalte trifft (CS1022).
  • Entfernen Sie alle Zugriffsmodifizierer oder Attribute aus Namespacedeklarationen, da Namespaces keine Modifizierer wie public oder private unterstützen, und Attribute nicht auf sie angewendet werden können (CS1671).
  • Verschieben Sie Namespacedeklarationen aus C#-Skriptdateien (.csx) und in reguläre Quelldateien (.cs), da Skriptcode in einem einzigen Ausführungskontext ausgewertet wird, der Namespacedeklarationen (CS7021) nicht unterstützt.

Namespace- und Typbenennungskonflikte

Die folgenden Fehler und Warnungen beziehen sich auf Namenskonflikte zwischen Namespaces und Typen:

  • CS0104: "reference" ist ein mehrdeutiger Verweis zwischen "Bezeichner" und "Bezeichner".
  • CS0434: Der Namespacename1 in NamespaceName2 ist in Konflikt mit dem Typ "TypeName1" in NamespaceName3.
  • CS0435: Der Namespace "namespace" in "assembly" ist in Konflikt mit dem importierten Typ "type" in "assembly". Verwenden des in "assembly" definierten Namespaces.
  • CS0436: Der Typ "Typ" in "Assembly" steht im Konflikt mit dem importierten Typ "Typ2" in "Assembly". Verwendung des Typs, der in "Assembly" definiert ist.
  • CS0437: Der Typ "type" in "assembly2" ist in Konflikt mit dem importierten Namespace "namespace" in "assembly1". Verwenden des typs, der in "assembly" definiert ist.
  • CS0438: Der Typ "type" in "module_1" ist in Konflikt mit dem Namespace "namespace" in "module_2".

Lesen Sie die Verwendungsdirektive, den externen Alias und die Namespacealiasqualifizierersprachenreferenz für die Regeln, die diese Diagnose regeln. Mögliche Korrekturen umfassen:

  • Verwenden Sie einen vollqualifizierten Namen oder einen Namespacealias , wenn Ihr Code auf einen Namen verweist, der in mehreren importierten Namespaces vorhanden ist.
  • Der Compiler kann nicht bestimmen, welchen Typ Sie verwenden möchten, wenn derselbe Name in zwei oder mehr Namespaces angezeigt wird, die von using Direktiven (CS0104) importiert werden.
  • Benennen Sie entweder den Typ oder den Namespace um, wenn ein importierter Typ und ein importierter geschachtelter Namespace denselben vollqualifizierten Namen aufweisen. Der Compiler kann nicht zwischen ihnen unterscheiden, wenn auf den Namen verwiesen wird (CS0434, CS0438).

Um die Namenskonfliktwarnungen zu beheben, benennen Sie eine der widersprüchlichen Deklarationen um, verwenden Sie einen anderen Namespace, entfernen Sie den unnötigen Assemblyverweis oder verwenden Sie einen externen Alias, um zwischen den beiden Definitionen eindeutig zu unterscheiden. Der Compiler löst diese Konflikte automatisch aus – mit dem lokal definierten Namespace über dem importierten Typ (CS0435), dem lokal definierten Typ über den importierten Typ (CS0436) oder dem lokal definierten Typ über den importierten Namespace (CS0437), aber die Warnungen geben eine potenzielle Ursache für Verwirrung an, die Sie adressieren sollten.

Vordefinierte Typimporte

Der folgende Fehler bezieht sich auf fehlende vordefinierte Typdefinitionen:

  • CS0518: Vordefinierter Typ "Type" ist nicht definiert oder importiert.

Hinweis

Diese Warnung wird nur während expliziter Build- oder Neuaufbau-Vorgängen gemeldet. Sie wird während der Eingabe in der IDE nicht als Teil der IntelliSense-Diagnose angezeigt. Dies bedeutet: Wenn Sie die Warnung mithilfe des Felds beheben oder entfernen, wird die Warnung möglicherweise in der Fehlerliste beibehalten, bis Sie das Projekt erstellen oder erneut erstellen.

Details zu den Vorschriften, die diese Diagnose regeln, finden Sie in der Sprachreferenz zur NoStandardLib-Compileroption.

Stellen Sie sicher, dass Ihr Projekt auf die richtige .NET-Laufzeit ausgerichtet ist. Vordefinierte Typen wie System.Int32 und System.String stammen aus der Laufzeitbibliothek. Eine falsche oder fehlende <TargetFramework> Spezifikation verhindert, dass der Compiler diese Typen (CS0518) findet. Stellen Sie sicher, dass die <TargetFramework>Eigenschaft in Ihrer .csproj Datei die beabsichtigte Laufzeit angibt (z. B. net10.0). Geben Sie die NoStandardLib-Compileroption nicht an, es sei denn, Sie möchten Ihren eigenen System Namespace definieren. Mit dieser Option wird verhindert, dass die Standardbibliothek importiert wird, die alle vordefinierten Typen (CS0518) definiert. Wenn der Fehler weiterhin besteht, versuchen Sie, das Projekt in Visual Studio neu zu laden, die obj Ordner zu bin löschen und das Projekt neu zu erstellen oder die .NET-Laufzeit (CS0518) neu zu installieren.