Partager via


Erreur du compilateur CS0246

Mise à jour : Juillet 2008

Message d'erreur

Le type ou le nom d'espace de noms 'type/espace de noms' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?)
The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)

Un type est introuvable. Vous avez peut-être oublié de référencer (/reference) l'assembly qui contient le type ou vous n'avez pas qualifié correctement son utilisation avec la directive using.

Cette erreur peut se produire pour de nombreuses raisons :

  • Le nom du type ou de l'espace de noms que vous essayez d'utiliser contient peut-être une faute d'orthographe (y compris la casse appropriée). Sans le nom correct, le compilateur ne peut pas trouver la définition du type ou de l'espace de noms auquel vous avez fait référence dans votre code. Cette situation se produit souvent car C# est sensible à la casse, et l'utilisation correcte de la casse n'a pas été respectée dans la référence au type. Par exemple, Dataset ds; générera CS0246 ; vous pouvez constater que le s dans Dataset n'est pas en majuscules.

  • Si l'erreur porte sur un nom d'espace de noms, vous n'avez peut-être pas référencé (/reference) l'assembly contenant l'espace de noms. Par exemple, votre code pourrait contenir using Accessibility;. Cependant, si votre projet ne référence pas l'assembly Accessibility.dll, vous obtiendrez CS0246. Pour obtenir des informations sur l'ajout d'une référence dans l'environnement de développement, consultez Ajouter une référence, boîte de dialogue.

  • Si l'erreur concerne un nom de type, vous n'avez peut-être pas la directive using appropriée, ou vous n'avez pas indiqué le nom complet qualifié du type. Prenons la ligne de code suivante : DataSet ds;. Pour pouvoir utiliser le type DataSet, vous devez effectuer deux opérations. Premièrement, vous devez créer une référence à l'assembly contenant la définition du type DataSet. Deuxièmement, vous devez avoir une directive using pour l'espace de noms où se trouve DataSet. Par exemple, dans la mesure où DataSet se trouve dans l'espace de noms System.Data, l'instruction suivante doit figurer au début de votre code : using System.Data;.

  • La deuxième opération n'est pas obligatoire. Cependant, si vous avez omis cette opération, vous devez alors indiquer le nom complet qualifié du type DataSet lorsque vous y faites référence. Le fait d'indiquer le nom complet qualifié signifie que vous utilisez l'espace de noms et le type chaque fois que vous y faites référence dans votre code. Si vous décidez donc d'ignorer la deuxième opération, vous devez remplacer votre code de déclaration ci-dessus par : System.Data.DataSet ds;.

  • Si l'erreur concerne un non-type, vous avez peut-être utilisé une variable ou un autre élément alors qu'un type était attendu. Par exemple, dans l'instruction is, si vous utilisez un objet Type plutôt qu'un type réel, vous obtiendrez cette erreur.

  • Si vous utilisez une using-alias-directive et que vous ne qualifiez pas complètement le nom de type, cette erreur est générée. Une using-alias-directive n'utilise pas d'autres directives using dans le fichier de code source pour résoudre des types. Par exemple, le code suivant génère l'erreur CS0246 car le type List<int> n'est pas qualifié complet, bien qu'une directive using pour System.Collections.Generic soit présente :

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

L'exemple suivant génère l'erreur CS0246 :

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

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

   public static void Main()
   {
   }
}

Voici un exemple d'utilisation d'un objet de type Type alors qu'un type réel était attendu (cas 4 ci-dessus) :

// 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()
    {
    }
}

Historique des modifications

Date

Historique

Raison

Juillet 2008

Ajout d'une cause possible pour l'erreur.

Améliorations apportées aux informations.