Errore del compilatore CS0246Compiler Error CS0246

Il nome di tipo o di spazio dei nomi 'type/namespace' non è stato trovato. Probabilmente manca una direttiva using o un riferimento all'assembly.The type or namespace name 'type/namespace' could not be found (are you missing a using directive or an assembly reference?)

Non è stato trovato un tipo o uno spazio dei nomi usato nel programma.A type or namespace that is used in the program was not found. È possibile che si sia dimenticato di fare riferimento (-Reference) all'assembly che contiene il tipo. in alternativa, è possibile che non sia stata aggiunta la direttiva usingobbligatoria.You might have forgotten to reference (-reference) the assembly that contains the type, or you might not have added the required using directive. In alternativa, potrebbe esserci un problema con l'assembly cui si intende fare riferimento.Or, there might be an issue with the assembly you are trying to reference.

Le situazioni seguenti possono provocare l'errore del compilatore CS0246.The following situations cause compiler error CS0246.

  • Il nome del tipo o dello spazio dei nomi non è stato digitato correttamente.Did you misspell the name of the type or namespace? Senza il nome corretto, il compilatore non può trovare la definizione per il tipo o per lo spazio dei nomi.Without the correct name, the compiler cannot find the definition for the type or namespace. Questo problema è spesso dovuto al fatto che il nome è stato specificato con maiuscole o minuscole non corrette.This often occurs because the casing used in the name of the type is not correct. Ad esempio, Dataset ds; genera l'errore CS0246 perché la "s" in Dataset deve essere maiuscola.For example, Dataset ds; generates CS0246 because the s in Dataset must be capitalized.

  • Se l'errore riguarda il nome di uno spazio dei nomi, è stato aggiunto un riferimento (-Reference) all'assembly che contiene lo spazio dei nomi?If the error is for a namespace name, did you add a reference (-reference) to the assembly that contains the namespace? Ad esempio, il codice potrebbe contenere la direttiva using Accessibility.For example, your code might contain the directive using Accessibility. Tuttavia, se il progetto non fa riferimento all'assembly Accessibility.dll, viene segnalato l'errore CS0246.However, if your project does not reference the assembly Accessibility.dll, error CS0246 is reported. Per altre informazioni, vedere Gestione dei riferimenti in un progettoFor more information, see Managing references in a project

  • Se l'errore riguarda il nome di un tipo, verificare di aver incluso la direttiva using corretta o, in alternativa, che il nome del tipo sia completo.If the error is for a type name, did you include the proper using directive, or, alternatively, fully qualify the name of the type? Considerare la dichiarazione seguente: DataSet ds.Consider the following declaration: DataSet ds. Per usare il tipo DataSet , sono necessari due elementi.To use the DataSet type, you need two things. Prima di tutto, è necessario un riferimento all'assembly che contenga la definizione per il tipo DataSet .First, you need a reference to the assembly that contains the definition for the DataSet type. Quindi, è necessaria una direttiva using per lo spazio dei nomi in cui si trova DataSet .Second, you need a using directive for the namespace where DataSet is located. Ad esempio, poiché DataSet si trova nello spazio dei nomi System.Data , è necessaria la direttiva seguente all'inizio del codice: using System.Data.For example, because DataSet is located in the System.Data namespace, you need the following directive at the beginning of your code: using System.Data.

    La direttiva using non è necessaria.The using directive is not required. Tuttavia, se viene omessa, è necessario specificare il tipo DataSet in modo completo quando vi si fa riferimento.However, if you omit the directive, you must fully qualify the DataSet type when referring to it. Un nome di tipo completo significa che è necessario specificare sia lo spazio dei nomi sia il tipo ogni volta che si fa riferimento al tipo nel codice.Full qualification means that you specify both the namespace and the type each time you refer to the type in your code. Se si omette la direttiva using nell'esempio precedente, è necessario scrivere System.Data.DataSet ds in modo da dichiarare ds invece di DataSet ds.If you omit the using directive in the previous example, you must write System.Data.DataSet ds to declare ds instead of DataSet ds.

  • È stato usato un elemento del linguaggio o una variabile in cui è previsto un tipoDid you use a variable or some other language element where a type was expected? Ad esempio, se in un'istruzione is si usa un oggetto Type invece di un tipo effettivo, si ottiene l'errore CS0246.For example, in an is statement, if you use a Type object instead of an actual type, you get error CS0246.

  • È stato fatto riferimento all'assembly che è stato compilato in base a una versione di .NET Framework più recente rispetto alla versione del framework di destinazione del programma.Did you reference the assembly that was built against a higher framework version than the target framework of the program? Oppure è stato fatto riferimento al progetto che è destinato a una versione di .NET Framework più recente rispetto alla versione del framework di destinazione del programma.Or did you reference the project that is targeting a higher framework version than the target framework of the program? Ad esempio, si usa il progetto destinato a .NET Framework 4.6.1 e si usa il tipo del progetto destinato a .NET Framework 4.7.1.For example, you work on the project that is targeting .NET Framework 4.6.1 and use the type from the project that is targeting .NET Framework 4.7.1. Verrà visualizzato l'errore CS0246.Then you get error CS0246.

  • È stata usata una direttiva alias using senza specificare un nome di tipo completoDid you use a using alias directive without fully qualifying the type name? Una direttiva alias using non usa le direttive using nel file del codice sorgente per risolvere i tipi.A using alias directive does not use the using directives in the source code file to resolve types. L'esempio seguente genera l'errore CS0246 perché il tipo List<int> non è completo.The following example generates CS0246 because the type List<int> is not fully qualified. La direttiva using per System.Collections.Generic non previene l'errore.The using directive for System.Collections.Generic does not prevent the error.

    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 si ottiene questo errore in un frammento di codice che prima funzionava, cercare prima di tutto eventuali riferimenti mancanti o non risolti in Esplora soluzioni.If you get this error in code that was previously working, first look for missing or unresolved references in Solution Explorer. È necessario reinstallare un pacchetto NuGet ?Do you need to reinstall a NuGet package? Per informazioni sul modo in cui il sistema di compilazione cerca i riferimenti, vedere l'articolo sulla risoluzione di riferimenti a file in Team Build.For information about how the build system searches for references, see Resolving file references in team build. Se tutti i riferimenti sembrano corretti, esaminare la cronologia del controllo del codice sorgente per individuare che cosa è cambiato nel file con estensione csproj e/o nel file di origine locale.If all references seem to be correct, look in your source control history to see what has changed in your .csproj file and/or your local source file.

    Se non è stato ancora possibile accedere correttamente al riferimento, usare Visualizzatore oggetti per esaminare l'assembly che dovrebbe contenere lo spazio dei nomi e verificare che questo sia effettivamente presente.If you haven’t successfully accessed the reference yet, use the Object Browser to inspect the assembly that is supposed to contain this namespace and verify that the namespace is present. Se si verifica in Visualizzatore oggetti che l'assembly contiene lo spazio dei nomi, provare a rimuovere la direttiva using e controllare se vi sono altre interruzioni nel codice.If you verify with Object Browser that the assembly contains the namespace, try removing the using directive for the namespace and see what else breaks. Il problema principale potrebbe essere provocato da un altro tipo in un assembly diverso.The root problem may be with some other type in another assembly.

L'esempio seguente genera l'errore CS0246 perché manca una direttiva using necessaria.The following example generates CS0246 because a necessary using directive is missing.

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

L'esempio seguente provoca l'errore CS0246 perché è stato usato un oggetto di tipo Type in un punto in cui è previsto l'uso di un tipo effettivo.The following example causes CS0246 because an object of type Type was used where an actual type was expected.

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