Compilerfehler CS0246
Der Typ- oder Namespacename „type/namespace“ konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?)
Ein im Programm verwendeter Typ oder Namespace wurde nicht gefunden. Sie haben möglicherweise vergessen, auf die Assembly zu verweisen (References), die den Typ enthält, oder Sie haben die erforderliche using-Anweisung nicht hinzugefügt. Oder es liegt möglicherweise ein Problem mit der Assembly vor, auf die Sie verweisen möchten.
In den folgenden Situationen wird Compilerfehler CS0246 generiert.
Ist der Typ- oder Namespacename richtig geschrieben? Ohne den richtigen Namen kann der Compiler die Definition für den Typ oder Namespace nicht finden. Das kommt oft vor, weil beim Typnamen nicht die richtige Groß-/Kleinschreibung verwendet wurde.
Dataset ds;
generiert z. B. CS0246, weil das „s“ in „ Dataset“ groß geschrieben werden muss.Wenn der Fehler für einen Namespacenamen auftritt, überprüfen Sie, ob Sie einen Verweis (References) auf die Assembly mit dem Namespace hinzugefügt haben. Angenommen, Ihr Code enthält die Direktive
using Accessibility
. Wenn das Projekt jedoch nicht auf die Assembly „Accessibility.dll“ verweist, wird der Fehler CS0246 gemeldet. Weitere Informationen finden Sie unter Verwalten von Verweisen in einem Projekt.Wenn der Fehler für einen Typnamen auftritt, überprüfen Sie, ob Sie die geeignete Using-Anweisung bzw. alternativ den vollqualifizierten Namen des Typs verwendet haben. Betrachten Sie hierzu die folgende Deklaration:
DataSet ds
. Um denDataSet
-Typ zu verwenden, sind zwei Dinge erforderlich. Erstens wird ein Verweis auf die Assembly benötigt, mit der die Definition für denDataSet
-Typ eingeschränkt wird. Zweitens brauchen Sie eineusing
-Direktive für den Namespace, in dem sichDataSet
befindet. Weil sichDataSet
z. B. im System.Data -Namespace befindet, benötigen Sie die folgende Direktive am Anfang des Codes:using System.Data
.Die
using
-Direktive ist nicht erforderlich. Wenn Sie die Direktive jedoch weglassen, müssen Sie denDataSet
-Typ vollständig qualifizieren, wenn Sie darauf verweisen. Vollständige Qualifizierung bedeutet, dass Sie jedes Mal, wenn Sie im Code auf den Typ verweisen, sowohl den Namespace als auch den Typ angeben müssen. Wenn Sie dieusing
-Direktive im vorherigen Beispiel weglassen, müssen SieSystem.Data.DataSet ds
anstelle vonds
schreiben, umDataSet ds
zu deklarieren.Haben Sie eine Variable oder ein anderes Sprachelement verwendet, wo ein Typ erwartet wurde? Wenn Sie z. B. in einer is -Anweisung ein
Type
-Objekt anstelle eines tatsächlichen Typs verwenden, erhalten Sie den Fehler CS0246.Überprüfen Sie, ob Sie auf eine Assembly verweisen, die für eine höhere Version des Frameworks erstellt wurde, als das Zielframework des Programms. Überprüfen Sie auch, ob Sie auf ein Projekt verweisen, das eine höhere Version des Frameworks als Ziel festlegt, als das Zielframework des Programms. Wenn Sie zum Beispiel an einem Projekt arbeiten, das .NET Framework 4.6.1 als Ziel festlegt, und Sie dabei den Typ eines Projekts verwenden, das .NET Framework 4.7.1 als Ziel festlegt, wird der Fehler CS0246 ausgegeben.
Sind alle Projekte, auf die verwiesen wird, in der ausgewählten Buildkonfiguration und -plattform enthalten? Verwenden Sie den Visual Studio-Konfigurations-Manager, um sicherzustellen, dass alle Projekte, auf die verwiesen wird, für die Erstellung mit der ausgewählten Konfiguration und Plattform markiert sind.
Haben Sie eine using-Aliasdirektive ohne vollständige Qualifizierung des Typnamens verwendet? Eine
using
-Aliasdirektive verwendet zum Auflösen von Typen nicht dieusing
-Direktiven in der Quellcodedatei. Im folgende Beispiel wird CS0246 generiert, da der TypList<int>
nicht vollqualifiziert ist. Dieusing
-Direktive fürSystem.Collections.Generic
verhindert den Fehler nicht.using System.Collections.Generic; // The following declaration generates CS0246. using myAliasName = List<int>; // To avoid the error, fully qualify List. using myAliasName2 = System.Collections.Generic.List<int>;
Wenn dieser Fehler in Code auftritt, der zuvor funktioniert hat, suchen Sie zuerst nach fehlenden oder nicht aufgelösten Verweise im Projektmappen-Explorer. Überprüfen Sie, ob Sie ein NuGet-Paket neu installieren müssen. Informationen darüber, wie das Buildsystem nach Verweisen sucht, finden Sie unter Resolving file references in team build. Wenn alle Verweise korrekt zu sein scheinen, suchen Sie in Ihrem Verlauf für die Quellcodeverwaltung nach den Änderungen in der CSPROJ-Datei und/oder der lokalen Quelldatei.
Wenn Sie noch nicht erfolgreich auf den Verweis zugegriffen haben, verwenden Sie den Objektkatalog zum Überprüfen der Assembly, die diesen Namespace enthalten soll, und stellen Sie sicher, dass der Namespace vorhanden ist. Wenn Sie mit dem Objektkatalog festgestellt haben, dass die Assembly den Namespace enthält, entfernen Sie die
using
-Anweisung für den Namespace, und prüfen Sie, welche anderen Elemente unterbrochen werden. Das Hauptproblem liegt möglicherweise bei einem anderen Typ in einer anderen Assembly.
Im folgende Beispiel wird CS0246 generiert, weil eine erforderliche using
-Direktive nicht vorhanden ist.
// CS0246.cs
//using System.Diagnostics;
public class MyClass
{
// The following line causes CS0246. To fix the error, uncomment
// the using directive for the namespace for this attribute,
// System.Diagnostics.
[Conditional("A")]
public void Test()
{
}
public static void Main()
{
}
}
Im folgenden Beispiel wird CS0246 generiert, weil ein Objekt vom Typ Type
verwendet wurde, wo eigentlich der Typ erwartet wurde.
// CS0246b.cs
using System;
class ExampleClass
{
public bool supports(object o, Type t)
{
// The following line causes CS0246. You must use an
// actual type, such as ExampleClass, String, or Type.
if (o is t)
{
return true;
}
return false;
}
}
class Program
{
public static void Main()
{
ExampleClass myC = new ExampleClass();
myC.supports(myC, myC.GetType());
}
}