CS0246 de erro do compilador

Mensagem de erro

O nome do namespace ou tipo 'tipo/namespace' não foi encontrado (precisa de um usando diretiva ou uma referência de assembly?)

Um tipo não foi encontrado.Você pode ter esquecido de referência (/Reference) o assembly que contém o tipo ou você pode não ter corretamente qualificado seu uso com o usando a diretiva.

Há várias razões para esse erro:

  • O nome do tipo ou namespace que você está tentando usar pode ser escrita incorretamente (incluindo o correto caso).Sem o nome correto, o compilador é não é possível localizar a definição para o tipo ou namespace que você ter chamado de no seu código.Isso ocorre com mais freqüência porque translation from VPE for Csharp faz distinção entre diferenciar diferenciar maiúsculas de minúsculas e o uso de diferenciar diferenciar maiúsculas de minúsculas correto não tenha sido usado ao fazer referência ao tipo.Por exemplo, Dataset ds; gerará CS0246; não é colocado em maiúscula aviso o s no DataSet.

  • Se o erro é para um nome de namespace, você pode não ter referenciado (/Reference) o assembly que contém o espaço para nome.Por exemplo, seu código pode conter using Accessibility;. No entanto, se seu projeto não referenciar o assembly acessibilidade.dll você obterá CS0246.See Caixa de diálogo Add Reference para obter informações sobre como adicionar uma referência no ambiente de desenvolvimento.

  • Se o erro é para um nome de tipo, você pode não ter o correto usando o diretiva, ou ter não totalmente qualificado o nome do tipo.Considere a seguinte linha de código: DataSet ds;.Para poder usar o tipo de DataSet, você precisaria fazer duas coisas.Primeiro, você precisa de uma referência ao assembly que contém a definição para o tipo de DataSet.Em segundo lugar, você precisa de um usando diretiva para o namespace onde DataSet está localizado.Por exemplo, porque DataSet está localizada no sistema.dados namespace, você precisaria a demonstrativo a seguir no início do código: using System.Data;.

  • A segunda etapa não é necessária.No entanto, se você tiver omitido esta etapa e, em seguida, ele exigiria que você qualifica totalmente o tipo de DataSet ao fazer referência a ele.Qualificando totalmente os ele significa que você usar o espaço para nome e o tipo de cada vez que você consultá-lo em seu código.Assim, se decidir ignorar a segunda etapa você precisaria alterar o código da declaração acima para: System.Data.DataSet ds;.

  • Se o erro é para um tipo não, você pode ter usado uma variável ou alguma outra coisa quando era esperado um tipo.Por exemplo, no é demonstrativo, se você usar um objeto de tipo em vez de um tipo real, você receberá esse erro.

  • Se você usar um usando a diretiva de alias e não sejam totalmente o nome do tipo, esse erro é gerado.Um usando diretiva alias não usa o Outros usando as diretivas no arquivo de código fonte para resolver tipos.Por exemplo, o código a seguir gera CS0246 porque o tipo de List<int> não é totalmente qualificado, até mesmo, embora um usando diretiva para System.Collections.Generic está presente:

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

O exemplo a seguir gera CS0246:

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

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

   public static void Main()
   {
   }
}

Aqui está um exemplo onde um objeto do tipo Type foi usado onde um tipo real era esperado (caso a 4 acima):

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

Date

History

Motivo

Julho de 2008

Adicionado possível causa do erro.

Aprimoramento de informações.