Erro do Compilador CS0246
O nome do tipo ou do namespace 'tipo/namespace' não pode ser encontrado (está faltando uma diretiva using ou uma referência de assembly?)
Não foi encontrado um tipo ou um namespace usado no programa. Talvez você tenha esquecido de referenciar (Referências) o assembly que contém o tipo ou talvez não tenha adicionado a diretiva de uso necessária. Ou, pode haver um problema com o assembly que você está tentando fazer referência.
As situações a seguir causam o erro do compilador CS0246.
Você digitou incorretamente o nome do tipo ou do namespace? Sem o nome correto, o compilador não pode localizar a definição do tipo ou do namespace. Isso geralmente ocorre porque as maiúsculas e minúsculas usadas no nome do tipo não estão corretas. Por exemplo,
Dataset ds;
gera o erro CS0246 porque o s de Dataset deve ser colocado em maiúsculas.Se o erro for para um nome de namespace, você adicionou uma referência (Referências) ao assembly que contém o namespace? Por exemplo, seu código pode conter a diretiva
using Accessibility
. No entanto, se seu projeto não fizer referência ao assembly Accessibility.dll, o erro CS0246 será relatado. Para obter mais informações, consulte Gerenciando referências em um projetoSe o erro for de um nome de tipo, verifique se você incluiu a diretiva using adequada ou, alternativamente, qualificou totalmente o nome do tipo. Considere a seguinte declaração:
DataSet ds
. Para usar o tipoDataSet
, você precisa de duas coisas. Primeiro, você precisa de uma referência ao assembly que contém a definição para o tipoDataSet
. Em segundo lugar, você precisa de uma diretivausing
para o namespace em que oDataSet
está localizado. Por exemplo, comoDataSet
está localizado no namespace System.Data, você precisa da seguinte diretiva no início do seu código:using System.Data
.A diretiva
using
não é necessária. No entanto, se você omitir a diretiva, será necessário qualificar totalmente o tipoDataSet
ao fazer referência a ele. Ser totalmente qualificado significa que você especificará o namespace e o tipo todas as vezes em que se referir ao tipo em seu código. Se você omitir a diretivausing
no exemplo anterior, deverá escreverSystem.Data.DataSet ds
para declarards
em vez deDataSet ds
.Você usou uma variável ou outro elemento de linguagem no qual era esperado um tipo? Por exemplo, em uma instrução is, se você usar um objeto
Type
, em vez de usar um tipo, você obterá o erro CS0246.Você fez referência ao assembly que foi criado em uma versão de estrutura mais recente que a versão da estrutura de destino do programa? Ou você fez referência ao projeto que está usando uma versão da estrutura de destino mais recente que aquela do programa? Por exemplo, você trabalha no projeto que tem como destino o .NET Framework 4.6.1 e usa o tipo do projeto que tem como destino o .NET Framework 4.7.1. Você obtém então o erro CS0246.
Você usou uma diretiva alias de using sem qualificar totalmente o nome do tipo? Uma diretiva alias de
using
não usa as diretivasusing
no arquivo de código-fonte para resolver tipos. O exemplo a seguir gera o erro CS0246 porque o tipoList<int>
não está totalmente qualificado. A diretrizusing
paraSystem.Collections.Generic
não impede que o erro.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>;
Se você obtiver esse erro em um código que funcionava anteriormente, primeiro procure por referências ausentes ou não resolvidas no Gerenciador de Soluções. Você precisa reinstalar um pacote NuGet? Para obter informações sobre como o sistema de build procura por referências, consulte Resolvendo referências de arquivo no build de equipe. Se todas as referências parecem estar corretas, examine o histórico do controle do código-fonte para ver o que mudou no seu arquivo .csproj e/ou no arquivo de origem local.
Se você ainda não conseguiu acessar a referência, use o Pesquisador de Objetos para inspecionar o assembly que deveria conter este namespace e verifique se o namespace está presente. Se você verificar com o Pesquisador de Objetos que o assembly contém o namespace, tente remover a diretiva
using
do namespace e veja o que mais será interrompido. A raiz do problema pode ser com outro tipo em outro assembly.
O exemplo a seguir gera o erro CS0246 porque uma diretiva using
necessária está ausente.
// 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()
{
}
}
O exemplo a seguir causa o erro CS0246 porque um objeto do tipo Type
foi usado, mas era esperado um tipo real.
// 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());
}
}