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 (/reference), die den Typ enthält, oder Sie haben die erforderliche Using-Direktivenicht 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, haben Sie einen Verweis (/reference) auf die Assembly mit dem Namespace hinzugefügt? 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: Haben Sie die geeignete using-Direktive bzw. alternativ den vollqualifizierten Namen des Typs verwendet? Betrachten Sie hierzu die folgende Deklaration: DataSet ds. Um den DataSet -Typ zu verwenden, sind zwei Dinge erforderlich. Erstens wird ein Verweis auf die Assembly benötigt, mit der die Definition für den DataSet -Typ eingeschränkt wird. Zweitens brauchen Sie eine using -Direktive für den Namespace, in dem sich DataSet befindet. Weil sich DataSet 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 den DataSet -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 die using -Direktive im vorherigen Beispiel weglassen, müssen Sie System.Data.DataSet ds anstelle von ds schreiben, um DataSet dszu 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.

  • Haben Sie eine using-Aliasdirektive ohne vollständige Qualifizierung des Typnamens verwendet? Eine using -Aliasdirektive verwendet zum Auflösen von Typen nicht die using -Direktiven in der Quellcodedatei. Im folgende Beispiel wird CS0246 generiert, da der Typ List<int> nicht vollqualifiziert ist. Die using -Direktive für System.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. Müssen Sie ein NuGet-Paket neu installieren? 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());  
    }  
}