Behandeln von Warnungen im Zusammenhang mit Namespaces
In diesem Artikel werden die folgenden Compilerfehler behandelt:
- CS0138: Fehler: Eine „using“-Namespaceanweisung kann nur auf Namespaces angewandt werden. „type“ ist ein Typ und kein Namespace.
- CD0431: Fehler: Der Alias „Bezeichner“ kann nicht mit
::
verwendet werden, da der Alias auf einen Typ verweist. Verwenden Sie stattdessen.
. - CS0432: Fehler: Der Alias „Bezeichner“ wurde nicht gefunden.
- 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.
. - 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 vorgängig in diesem Namespace aufgetreten.
- CS7000: Fehler: Unerwartete Verwendung eines Aliasnamens.
- CS7007: Fehler: Eine
using static
-Anweisung kann nur auf Typen angewendet werden. Erwägen Sie stattdessen eineusing namespace
-Anweisung - 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.
- CS9055: Fehler: Ein dateilokaler Typ kann nicht in einer „global using static“-Anweisung verwendet werden.
- 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 Modifiziererunsafe
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.
- CS0440: Warnung: Es sollte kein Alias mit dem Namen
global
definiert werden, daglobal::
immer ein Verweis auf den globalen Namespace und nicht auf einen Alias ist. - CS8019: Information: Nicht erforderliche „using“-Anweisung.
- CS8933: Information: Die „using“-Anweisung wurde zuvor bereits als „global using“ verwendet.
Diese Fehler und Warnungen deuten darauf hin, dass die using
-Anweisung nicht korrekt ist. In den folgenden Abschnitten werden diese Fehler und deren Behebung behandelt.
using-Anweisung
Die using
-Anweisung muss vor allen anderen Elementen in einer namespace
-Deklaration oder vor allen namespace
-Deklarationen in der Datei stehen. Wenn Sie eine using
-Anweisung später einfügen, generiert der Compiler den Fehler CS1529:
namespace UsingDirective;
public class MyClass
{
}
using System.Text.Json; // CS1529
Um dieses Problem zu beheben, verschieben Sie alle using
-Deklarationen an den Anfang der Datei oder an den Anfang des Namespace:
using System.Text.Json;
namespace UsingDirective;
public class MyClass
{
}
Der Compiler generiert die Warnung CS8933, CS0105 oder CS8019 für eine doppelte using
-Anweisung aus einer using
- oder global using
-Anweisung. Duplikate können entfernt werden.
Informationen zu Fehlern bei der Kombination einer using
-Anweisung mit den Modifizierern static
, global
oder unsafe
in einer using
-Anweisung finden Sie weiter unten in diesem Artikel.
„using static“-Anweisung
Die using static
-Anweisung importiert die Member eines Typs in den aktuellen Namespace. Im folgenden Beispiel werden die Methoden aus System.Console
(z. B. WriteLine
) in den aktuellen Namespace importiert:
using static System.Console;
Der Compiler generiert den Fehler CS0138, wenn Sie den Modifizierer static
weglassen:
using System.Console; // CS0138
Der Compiler generiert den Fehler CS7007, wenn Sie anstelle eines Typs den Modifizierer static
für den importierten Namespace einschließen:
using static System; // CS7007
Der Compiler gibt CS9162 aus, wenn das Symbol keiner der richtigen Typen ist.
Wenn Sie den Modifizierer static
mit dem Modifizierer unsafe
in einer using
-Anweisung kombinieren, muss der Modifizierer static
zuerst angegeben werden:
using static unsafe UnsafeExamples.UnsafeType;
Globale using-Anweisung
Eine global using
-Anweisung importiert den Namespace oder Typ in allen Quelldateien im aktuellen Projekt:
global using System.Text;
Sämtliche global using
-Anweisungen müssen allen nicht globalen using
-Anweisungen in der Quelldatei vorangestellt und dürfen nicht in einem namespace
platziert werden. Andernfalls werden CS8915 bzw. CS8914 generiert.
Darüber hinaus kann eine static global using
-Anweisung nicht auf einen dateilokalen Typ verweisen.
Aliasqualifizierer
Der Aliasqualifizierer (::
) steht vor einem Namespacealias oder hinter dem global
-Alias. Wenn Sie ::
verwenden, wo eigentlich .
verwendet werden sollte, um Elemente eines vollqualifizierten Namens zu trennen, gibt der Compiler einen der folgenden Fehler aus: CS0431, CS0432, CS0687, CS7000 oder CS8083.
Ersetzen Sie in allen Fällen ::
durch das Trennzeichen .
.
Wenn Sie außerdem einen Alias namens global
definieren, gibt der Compiler CS0440 aus. Der global
-Alias verweist immer auf den globalen Namespace. Sie können dafür keinen Alias deklarieren und sollten einen anderen Namen für Ihren Alias auswählen.
Konflikte bei Aliasnamen
Sie können mit einer using
-Direktive einen Alias für einen Namespace oder Typ deklarieren:
using JSON = System.Text.Json;
using ValueMap = System.Collections.Generic.Dictionary<string, decimal>;
using TimedData = (System.DateTime timeRecorded, decimal value);
Sie sollten dem Alias einen eindeutigen Namen zuweisen – in den vorherigen Beispielen der Name links vom =
-Zeichen. Die Verwendung eines Namens, der bereits einem Typ (z. B. Object
) oder einem Namespace (System
) zugeordnet ist, kann die Fehler CS0576 oder CS1537 verursachen.
Einschränkungen bei using-Aliasen
Vor C# 12 galten für die Programmiersprache bei using
-Anweisungen, die einen Alias für eine Typdeklaration erstellen, die folgenden Einschränkungen:
Sie können keinen Alias mit einer
using static
-Anweisung erstellen:using static con = System.Console; using static unsafe ip = int*;
Mit C# 12 wurden die folgenden Einschränkungen eingeführt:
Sie können die Modifizierer
in
,ref
oderout
in einem using-Alias nicht verwenden:// All these are invalid using RefInt = ref int; using OutInt = out int; using InInt = in int;
Eine
unsafe using
-Direktive muss einen Alias oder einestatic using
angeben:// Elsewhere: public namespace UnsafeExamples { public unsafe static class UnsafeType { // ... } } // Using directives: using unsafe IntPointer = int*; using static unsafe UnsafeExamples.UnsafeType; using unsafe UnsafeExamples; // not allowed
Sie können keinen Alias für einen Nullable-Verweistyp erstellen:
using NullableInt = System.Int32?; // Allowed using NullableString = System.String?; // Not allowed