Error del compilador CS0246

Actualización: Julio de 2008

Mensaje de error

No se puede encontrar el tipo o el nombre de espacio de nombres 'tipo o espacio de nombres' (¿falta una directiva using o una referencia de ensamblado?)
The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)

No se encontró un tipo. Puede que se haya olvidado hacer referencia (mediante /reference) al ensamblado que contiene el tipo, o puede no haberse calificado correctamente mediante la directiva using.

Hay varias razones que justifican este error:

  • Puede que el nombre del tipo o del espacio de nombres que intenta utilizar esté mal escrito (incluido el uso incorrecto de mayúsculas o minúsculas). Si el nombre no es correcto, el compilador no podrá encontrar la definición del tipo o del espacio de nombres al que se ha hecho referencia en el código. Esto suele ocurrir porque no se han utilizado correctamente las mayúsculas y minúsculas al hacer referencia al tipo y C# distingue entre mayúsculas y minúsculas. Por ejemplo, Dataset ds; generará el error CS0246; observe que la s de Dataset no está escrita en mayúscula.

  • Si el error es por un nombre de espacio de nombres, puede que no haya hecho referencia (/reference) al ensamblado que contiene el espacio de nombres. Por ejemplo, puede que el código contenga using Accessibility;. Sin embargo, si el proyecto no hace referencia al ensamblado Accessibility.dll, obtendrá el error CS0246. Vea Agregar referencia (Cuadro de diálogo) para obtener más información sobre cómo agregar una referencia en el entorno de desarrollo.

  • Si el error es por un nombre de tipo, puede que no disponga de la directiva using correcta o que no haya introducido el nombre completo del tipo. Observe la siguiente línea de código: DataSet ds;. Para poder utilizar el tipo DataSet, son necesarias dos operaciones. En primer lugar, necesita una referencia al ensamblado que contiene la definición del tipo DataSet. En segundo lugar, necesita utilizar una directiva para el espacio de nombres en el que se encuentra el tipo DataSet. Por ejemplo, puesto que DataSet está ubicado en el espacio de nombres System.Data, debería introducir la siguiente instrucción al principio del código: using System.Data;.

  • El segundo paso no es necesario. Sin embargo, si omite este paso, tendrá que introducir el nombre completo del tipo DataSet cuando haga referencia a él. Esto significa que debe utilizar el espacio de nombres y el tipo cada vez que se refiera a éste en el código. Por tanto, si ha decidido omitir el segundo paso, es necesario que cambie el código de declaración anterior por: System.Data.DataSet ds;.

  • Si el error corresponde a algo que no sea un tipo, puede deberse a que se haya utilizado una variable u otro objeto cuando se esperaba un tipo. Por ejemplo, este error se generará si se utiliza un objeto Type en la instrucción is en lugar de un tipo real.

  • Si utiliza una directiva de alias using y no califica totalmente el nombre de tipo, se genera este error. Una directiva de alias using no utiliza otras directivas using en el archivo de código fuente para resolver los tipos. Por ejemplo, el código siguiente genera CS0246 porque el tipo List<int> no está completo, aunque esté presente una directiva using para System.Collections.Generic:

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

El código siguiente genera el error CS0246:

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

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

   public static void Main()
   {
   }
}

A continuación se muestra un ejemplo en que se ha utilizado un objeto de tipo Type en un punto donde se esperaba un tipo real (caso 4 anterior):

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

Historial de cambios

Fecha

Historial

Motivo

Julio de 2008

Se ha agregado la causa posible del error.

Mejora de la información.