Freigeben über


Compilerfehler CS0246

Aktualisiert: Juli 2008

Fehlermeldung

Der Typ- oder Namespacename "Typ/Namespace" konnte nicht gefunden werden. (Fehlt eine using-Direktive oder ein Assemblyverweis?)
The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)

Ein Typ konnte nicht gefunden werden. Möglicherweise haben Sie vergessen, auf die den Typ enthaltende Assembly zu verweisen (/reference), oder Sie haben ihre Verwendung mit der using-Direktive nicht ordnungsgemäß qualifiziert.

Für diesen Fehler gibt es mehrere Gründe:

  • Der Name des Typs oder des Namespaces, den Sie verwenden möchten, wurde falsch geschrieben. (Hierbei zählt auch die Groß- und Kleinschreibung.) Wenn der Name nicht richtig angegeben wurde, kann der Compiler die Definition für den Typ bzw. Namespace, auf den Sie im Code verwiesen haben, nicht finden. Dies ist häufig der Fall, weil in C# die Groß- und Kleinschreibung beachtet werden muss, beim Verweisen auf den Typ jedoch nicht die richtige Groß- und Kleinschreibung verwendet wurde. Dataset ds; generiert beispielsweise CS0246, weil das "s" in "Dataset" nicht groß geschrieben wurde.

  • Wenn der Fehler in Bezug auf einen Namespacenamen auftritt, wurde möglicherweise nicht auf die den Namespace enthaltende Assembly verwiesen (/reference). Beispiel: Der Code enthält using Accessibility;. Wenn das Projekt jedoch nicht auf die Assembly Accessibility.dll verweist, erhalten Sie CS0246. Informationen zum Hinzufügen eines Verweises in der Entwicklungsumgebung finden Sie unter Dialogfeld "Verweis hinzufügen".

  • Wenn der Fehler in Bezug auf einen Typnamen auftritt, wurde möglicherweise nicht die richtige using-Direktive verwendet, oder der Name des Typs war nicht voll qualifiziert. Betrachten Sie die folgende Codezeile: DataSet ds;. Um den Typ DataSet verwenden zu können, müssen Sie zwei Schritte ausführen. Zunächst müssen Sie einen Verweis auf die Assembly hinzufügen, die die Definition für den Typ DataSet enthält. Anschließend müssen Sie eine using-Direktive für den Namespace verwenden, in dem sich DataSet befindet. Beispiel: Da sich DataSet im System.Data-Namespace befindet, benötigen Sie am Anfang des Codes die folgende Anweisung: using System.Data;.

  • Der zweite Schritt ist nicht erforderlich Wenn Sie diesen Schritt jedoch auslassen, müssen Sie den Typ DataSet beim Verweisen auf ihn voll kennzeichnen. Dies bedeutet, dass Sie den Namespace und den Typ im Code bei jedem Verweis darauf verwenden. Wenn Sie also den zweiten Schritt ausgelassen haben, müssen Sie den oben stehenden Deklarationscode wie folgt ändern: System.Data.DataSet ds;.

  • Wenn der Fehler in Bezug auf ein Objekt auftritt, das kein Typ ist, wurde möglicherweise eine Variable verwendet, wo ein Typ erwartet wurde. Ein solcher Fehler wird beispielsweise verursacht, wenn in der is-Anweisung ein Typobjekt statt eines tatsächlichen Typs verwendet wird.

  • Dieser Fehler wird generiert, wenn Sie eine using-alias-directive verwenden und der Typname nicht vollqualifiziert ist. Eine using-alias-directive verwendet keine anderen using-directives im Quellcode, um Typen aufzulösen. Im folgenden Code wird z. B. CS0246 generiert, da der Typ List<int> nicht vollqualifiziert ist, obwohl eine using-directive für System.Collections.Generic vorhanden ist:

    using System.Collections.Generic;
    // Generates CS0246:
    using myAliasName = List<int>; 
    // Does not generate an error:
    using myAliasName2 = System.Collections.Generic.List<int> 
    

Im folgenden Beispiel wird CS0246 generiert:

// CS0246.cs
// using System.Diagnostics;

public class MyClass
{
   [Conditional("A")]   // CS0246, uncomment using directive to resolve
   public void Test()
   {
   }

   public static void Main()
   {
   }
}

Im folgenden Beispiel wurde ein Objekt des Typs Typ verwendet, wo tatsächlich ein Typ erwartet wurde (siehe Fall 4 oben):

// CS0246b.cs
using System;

class C
{
    public bool supports(object o, Type t)
    {
         if (o is t)  // CS0246 – t is not a type
         {
            return true;
         }
         return false;
    }

    public static void Main()
    {
    }
}

Änderungsprotokoll

Date

Versionsgeschichte

Grund

Juli 2008

Möglicher Grund für den Fehler hinzugefügt.

Informationsergänzung.