Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra gli errori del compilatore seguenti:
- CS0104: Errore: 'reference' è un riferimento ambiguo tra 'identifier' e 'identifier'.
- CS0116: Errore: uno spazio dei nomi non può contenere direttamente membri, ad esempio campi, metodi o istruzioni.
- CS0138: Errore: una direttiva using namespace può essere applicata solo agli spazi dei nomi. 'Type' è un tipo, non uno spazio dei nomi.
- CS0430: Errore: l'alias extern 'alias' non è stato specificato in un'opzione /reference.
-
CS0431: Non è possibile usare l'alias 'identifier' con
::perché l'alias fa riferimento a un tipo. Usare., in alternativa. - CS0432: Errore: alias 'identificatore' non trovato.
- CS0434: Errore: Lo spazio dei nomi NamespaceName1 in NamespaceName2 è in conflitto con il tipo TypeName1 in NamespaceName3.
- CS0438: Errore: il tipo 'type' in 'module_1' è in conflitto con lo spazio dei nomi 'namespace' in 'module_2'.
- CS0439: Errore: una dichiarazione alias extern deve precedere tutti gli altri elementi definiti nello spazio dei nomi.
- CS0518: Errore: il tipo predefinito 'type' non è definito o importato.
- CS0576: Errore: lo spazio dei nomi 'namespace' contiene una definizione in conflitto con l'alias 'identifier'.
-
CS0687: Errore: il qualificatore di alias
::dello spazio dei nomi viene sempre risolto in un tipo o in uno spazio dei nomi, quindi non è valido qui. Si consiglia di utilizzare.al suo posto. - CS1022: Errore: tipo, definizione dello spazio dei nomi o fine del file previsto.
- CS1529: Errore: la clausola using deve precedere tutti gli altri elementi definiti nello spazio dei nomi ad eccezione delle dichiarazioni di alias extern.
- CS1537: Errore: l’alias using 'alias' è già presente in questo spazio dei nomi.
- CS1671: Errore: una dichiarazione dello spazio dei nomi non può avere modificatori o attributi.
- CS1679: Errore: Alias extern non valido per '/reference'; 'identifier' non è un identificatore valido.
- CS1680: Errore: Opzione alias riferimento non valida: 'alias=' -- nome file mancante.
- CS1681: Errore: non è possibile ridefinire l'alias extern globale.
- CS1730: Errore: gli attributi assembly e modulo devono precedere tutti gli altri elementi definiti in un file, ad eccezione delle clausole e delle dichiarazioni alias extern.
- CS2034: Errore: un'opzione /reference che dichiara un alias extern può avere un solo nome file. Per specificare più alias o nomi di file, usare più opzioni /reference.
- CS7000: Errore: uso imprevisto di un nome con alias.
-
CS7007: Errore: una
using staticdirettiva può essere applicata solo ai tipi. Si consideri invece unausing namespacedirettiva. - CS7015: Errore: 'alias extern' non valido in questo contesto.
- CS7021: Errore: Impossibile dichiarare lo spazio dei nomi nel codice script.
- CS8083: Errore: un nome qualificato come alias non è un'espressione.
- CS8085: Errore: non è possibile usare una direttiva 'using static' per dichiarare un alias.
- CS8914: Errore: una direttiva using globale non può essere usata in una dichiarazione dello spazio dei nomi.
- CS8915: Errore: una direttiva using globale deve precedere tutte le direttive using non globali.
- CS8954: Errore: il file di origine può contenere solo una dichiarazione di spazio dei nomi a livello di file.
- CS8955: Errore: il file di origine non può contenere sia dichiarazioni di namespace a livello di file che normali.
- CS8956: Errore: lo spazio dei nomi a livello di file deve precedere tutti gli altri membri in un file.
-
CS9130: Errore: using alias non può essere un tipo
ref. -
CS9131: Errore: solo un using alias può essere
unsafe. - CS9132: Errore: using alias non può essere un tipo riferimento nullable.
-
CS9133: Errore: il modificatore
staticdeve precedere il modificatoreunsafe. - CS9162: Tipo non valido per 'using static'. È possibile usare solo una classe, struct, interfaccia, enumerazione, delegato o namespace.
E i seguenti avvisi del compilatore:
- CS0105: Avviso: la direttiva using per 'namespace' è già presente in questo spazio dei nomi.
- CS0435: Avviso: lo spazio dei nomi 'namespace' in 'assembly' è in conflitto con il tipo importato 'type' in 'assembly'. Uso dello spazio dei nomi definito in 'assembly'.
- CS0436: avviso: il tipo 'type' in 'assembly' è in conflitto con il tipo importato 'type2' in 'assembly'. Uso del tipo definito in 'assembly'.
- CS0437: Avviso: il tipo 'type' in 'assembly2' è in conflitto con lo spazio dei nomi importato 'namespace' in 'assembly1'. Viene utilizzato il tipo definito in 'assembly'.
-
CS0440: Avviso: si consiglia di non assegnare il nome
globala un alias perchéglobal::fa sempre riferimento allo spazio dei nomi globale e non a un alias. - CS8019: Informazione: direttiva using non necessaria.
- CS8020: Info: alias extern inutilizzato.
- CS8933: Info: la direttiva using è già presente come using globale.
Questi errori e avvisi indicano problemi con le direttive using, le dichiarazioni dello spazio dei nomi o i conflitti di denominazione tra tipi e spazio dei nomi. Le sezioni seguenti descrivono questi errori e come correggerli.
direttiva using
Gli errori seguenti sono correlati alle using direttive:
- CS0105: La direttiva using per 'namespace' è apparsa in precedenza in questo namespace.
- CS0430: l'alias extern 'alias' non è stato specificato in un'opzione /reference.
- CS0439: una dichiarazione alias extern deve precedere tutti gli altri elementi definiti nello spazio dei nomi.
- CS1529: una clausola using deve precedere tutti gli altri elementi definiti nello spazio dei nomi ad eccezione delle dichiarazioni alias extern.
- CS1679: alias extern non valido per '/reference'; 'identifier' non è un identificatore valido.
- CS1680: opzione alias riferimento non valida: 'alias=' -- nome file mancante.
- CS1681: non è possibile ridefinire l'alias extern globale.
- CS1730: gli attributi assembly e modulo devono precedere tutti gli altri elementi definiti in un file, ad eccezione delle clausole e delle dichiarazioni alias extern.
- CS2034: un'opzione /reference che dichiara un alias extern può avere un solo nome file. Per specificare più alias o nomi di file, usare più opzioni /reference.
- CS7015: "alias extern" non è valido in questo contesto.
- CS8019: direttiva using non necessaria.
- CS8020: alias extern inutilizzato.
- CS8933: La direttiva using è apparsa in precedenza come direttiva "using globale".
Vedere le informazioni di riferimento sulla direttiva using e sul linguaggio alias extern per le regole che regolano la diagnostica. Le possibili correzioni includono:
- Spostare tutte le
usingdirettive all'inizio del file o all'inizio della dichiarazione del namespace. Il linguaggio C# richiedeusingche le direttive vengano fornite prima di altri elementi in uno spazio dei nomi (CS1529). - Spostare tutte le
extern aliasdichiarazioni prima di qualsiasiusingdirettiva. Il linguaggio richiede che gli alias extern vengano prima di tutti gli altri elementi, incluse le direttiveusing(CS0439, CS7015). - Sposta tutti gli attributi a livello di assembly e modulo dopo le clausole
usinge le dichiarazioniextern alias, ma prima di qualsiasi dichiarazione di tipo. Gli attributi devono seguire le direttive ma precedono i tipi (CS1730). - Assicurarsi che ogni
extern aliasdichiarazione nel codice sorgente abbia un alias corrispondente definito nelle opzioni di riferimento del progetto. Il compilatore non riesce a risolvere un alias non specificato (CS0430). - Usare un'opzione separata
/referenceper ogni alias extern anziché combinare più alias in un'unica opzione. Il compilatore richiede un alias per ogni opzione di riferimento (CS2034). - Verificare che l'alias nell'opzione
/referencesia un identificatore C# valido. L'alias deve seguire le regole di denominazione degli identificatori (CS1679). Includere un nome file dopo il segnale=nell'opzione di riferimento dell'alias. Il compilatore deve conoscere l'assembly a cui fa riferimento l'alias (CS1680). - Non tentare di ridefinire l'alias
globalextern.globalè un alias predefinito che fa riferimento a tutti i riferimenti non associati (CS1681). - Rimuovere le direttive duplicate
using. Il compilatore avvisa quando lo stesso spazio dei nomi viene importato più volte (CS0105, CS8019, CS8933). - Rimuovere le dichiarazioni inutilizzate
extern alias. Il compilatore rilascia una diagnostica quando un alias extern viene dichiarato ma non viene mai fatto riferimento nel codice (CS8020).
Utilizzo della direttiva "using static"
Gli errori seguenti sono correlati alle using static direttive:
- CS0138: Una direttiva 'using namespace' può essere applicata solo ai namespace; 'type' è un tipo, non un namespace.
-
CS7007: una
using staticdirettiva può essere applicata solo ai tipi. Si consideri invece unausing namespacedirettiva. -
CS9133:
staticmodificatore deve precedereunsafemodificatore. - CS9162: il tipo non è valido per 'using static'. È possibile usare solo una classe, uno struct, un'interfaccia, un'enumerazione, un delegato o uno spazio dei nomi.
Vedi il riferimento al linguaggio della using static directive per le regole che regolano queste diagnosi. Le possibili correzioni includono:
- Aggiungere il modificatore
staticquando si importano direttamente i membri di un tipo, perché ometterestaticindica al compilatore che si sta importando uno spazio dei nomi anziché un tipo (CS0138). - Rimuovere il modificatore
staticdurante l'importazione di uno spazio dei nomi, perchéusing staticpuò essere applicato solo ai tipi, non agli spazi dei nomi (CS7007). Verificare che la destinazione di unausing staticdirettiva sia una classe, uno struct, un'interfaccia, un'enumerazione o un delegato, perché altri tipi non sono destinazioni valide per le importazioni statiche (CS9162). - Posizionare il modificatore
staticprima del modificatoreunsafequando si combinano entrambi, perché il linguaggio richiede modificatori in un ordine specifico (CS9133).
Direttiva global using
Gli errori seguenti sono correlati alle global using direttive:
- CS8914: una direttiva using globale non può essere utilizzata in una dichiarazione di namespace.
- CS8915: una direttiva using globale deve precedere tutte le direttive using non globali.
Vedere le informazioni di riferimento sul linguaggio di direttiva using globale per le regole che regolano la diagnostica. Le possibili correzioni includono:
- Spostare
global usingle direttive all'esterno di qualsiasi dichiarazione dello spazio dei nomi per portarle all'ambito del file, perché gli using globali si applicano a livello di progetto e non possono essere ristretti a uno spazio dei nomi (CS8914). - Inserire tutte le
global usingdirettive prima di qualsiasi direttiva non globaleusingnel file, perché il linguaggio richiede direttive globali per precedere quelle locali (CS8915). - Si noti che una
static global usingdirettiva non può fare riferimento a un tipo locale di file .
Spazio dei nomi con ambito limitato al file
Gli errori seguenti sono correlati agli spazi dei nomi definiti a livello di file.
- CS8954: il file di origine può contenere solo una dichiarazione di spazio dei nomi file-scoped.
- CS8955: Il file di origine non può contenere sia dichiarazioni di spazio dei nomi a livello di file che dichiarazioni normali.
- CS8956: Il file-scoped namespace deve precedere tutti gli altri elementi in un file.
Vedere le informazioni di riferimento sul linguaggio dello spazio dei nomi con ambito file per le regole che regolano la diagnostica. Le possibili correzioni includono:
- Usare una sola dichiarazione dello spazio dei nomi con ambito file per ogni file, perché il linguaggio consente solo a un singolo spazio dei nomi con ambito file di impostare lo spazio dei nomi per tutti i tipi in un file (CS8954).
- Scegli tra le dichiarazioni di namespace con ambito file o di blocco all'interno di un singolo file, in quanto il linguaggio non consente di combinare entrambi gli stili (CS8955).
- Spostare la dichiarazione dello spazio dei nomi con ambito file prima di qualsiasi dichiarazione di tipo, perché lo spazio dei nomi deve essere stabilito prima che i tipi vengano dichiarati (CS8956).
Qualificatore alias
Gli errori seguenti sono correlati al qualificatore alias:
-
CS0431: Impossibile usare l'alias 'identifier' con
::perché l'alias fa riferimento a un tipo. Usare.invece. - CS0432: alias 'identifier' non trovato.
-
CS0440: la definizione di un alias denominato
globalnon è consigliata perchéglobal::fa sempre riferimento allo spazio dei nomi globale e non a un alias. -
CS0687: Il qualificatore alias dello spazio dei nomi viene sempre risolto in un tipo o in uno spazio dei nomi, pertanto non è consentito qui. Si consiglia invece di usare
.. - CS7000: uso imprevisto di un nome con alias.
- CS8083: un nome completo di alias non è un'espressione.
Vedere le informazioni di riferimento sul linguaggio del qualificatore alias dello spazio dei nomi per le regole che regolano la diagnostica. Le possibili correzioni includono:
- Sostituire l'operatore
::con l'operatore.quando si accede ai membri di un alias di tipo, perché il qualificatore::è valido solo per alias di spazi dei nomi, non per gli alias di tipo (CS0431, CS0687). - Verificare che l'alias a cui si fa riferimento sia dichiarato con una
usingdirettiva oextern alias, perché il compilatore non è in grado di risolvere un alias non definito (CS0432). - Usare il qualificatore alias solo nei contesti in cui ci si aspetta un nome di tipo o di spazio dei nomi, perché i nomi qualificati con alias non sono validi come espressioni (CS7000, CS8083).
- Scegliere un nome diverso per l'alias anziché
global, perchéglobalè riservato per fare riferimento allo spazio dei nomi globale e non può essere ridefinito (CS0440).
Uso delle restrizioni degli alias
Gli errori seguenti si riferiscono alle restrizioni relative all'uso degli alias:
- CS0576: spazio dei nomi 'namespace' contiene una definizione in conflitto con l'alias 'identifier'.
- CS1537: l'uso dell'alias 'alias' è apparso in precedenza in questo spazio dei nomi.
- CS8085: una direttiva 'using static' non può essere usata per dichiarare un alias.
-
CS9130: L'alias non può essere un
reftipo. -
CS9131: Solo un alias using può essere
unsafe. - CS9132: l'uso dell'alias non può essere un tipo di riferimento nullable.
Vedere il riferimento del linguaggio using alias per le regole che disciplinano le diagnostiche. Le possibili correzioni includono:
- Scegliere un nome univoco per l'alias che non entri in conflitto con i nomi di tipo o namespace esistenti nell'ambito, perché il compilatore non è in grado di distinguerli (CS0576).
- Usare ogni nome alias una sola volta all'interno di uno spazio dei nomi, perché le dichiarazioni alias duplicate creano ambiguità (CS1537).
- Rimuovere il
staticmodificatore quando si dichiara un alias, perché gli alias e le importazioni statiche si escludono a vicenda: usareusing staticper importare membri ousing Alias =per creare un alias, ma non entrambi insieme (CS8085).
A partire da C# 12, le restrizioni seguenti si applicano all'uso degli alias:
- Non usare
ref,inooutmodificatori in un using alias, perché questi modificatori di parametro non sono validi nei contesti di alias di tipo (CS9130). - Usare il
unsafemodificatore solo con alias che fanno riferimento ai tipi di puntatore o conusing staticdirettive, perchéunsafesenza un alias o un'importazione statica non è consentito (CS9131). - Usare un tipo riferimento non nullable durante la creazione di un alias a un tipo riferimento, perché i tipi riferimento nullable non possono essere aliasati direttamente (CS9132).
Dichiarazioni di namespace
Gli errori seguenti si riferiscono alle regole di dichiarazione dello spazio dei nomi:
- CS0116: uno spazio dei nomi non può contenere direttamente membri, ad esempio campi, metodi o istruzioni.
- CS1022: Definizione di tipo o spazio dei nomi, o fine del file prevista.
- CS1671: una dichiarazione dello spazio dei nomi non può avere modificatori o attributi.
- CS7021: Impossibile dichiarare lo spazio dei nomi nel codice di script.
Vedere la parola chiave dello spazio dei nomi e la struttura generale di un linguaggio di programma C# per le regole che regolano la diagnostica. Le possibili correzioni includono:
- Assicurarsi che tutti i metodi, i campi e le proprietà siano dichiarati all'interno di un tipo (classe, struct, record o interfaccia) anziché direttamente all'interno di uno spazio dei nomi, perché gli spazi dei nomi possono contenere solo dichiarazioni di tipo, spazi dei nomi annidati e
usingdirettive (CS0116). - Verificare la presenza di parentesi graffe non corrispondenti nel file di origine, perché una parentesi graffa di chiusura non corrispondente aggiuntiva dopo un namespace o una definizione di tipo genera un errore quando il compilatore rileva contenuto non previsto alla fine del file (CS1022).
- Rimuovere eventuali modificatori di accesso o attributi dalle dichiarazioni dello spazio dei nomi, perché gli spazi dei nomi non supportano modificatori come
publicoprivatee gli attributi non possono essere applicati a essi (CS1671). - Spostare le dichiarazioni dello spazio dei nomi dai file di script C# (
.csx) e nei normali file di origine (.cs), perché il codice script valuta in un singolo contesto di esecuzione che non supporta le dichiarazioni dello spazio dei nomi (CS7021).
Conflitti di denominazione dello spazio dei nomi e dei tipi
Gli errori e gli avvisi seguenti riguardano i conflitti di denominazione tra namespace e tipi.
- CS0104: 'reference' è un riferimento ambiguo tra 'identifier' e 'identifier'.
- CS0434: lo spazio dei nomi NamespaceName1 in NamespaceName2 è in conflitto con il tipo TypeName1 in NamespaceName3.
- CS0435: Lo spazio dei nomi 'namespace' in 'assembly' è in conflitto con il tipo importato 'type' in 'assembly'. Verrà utilizzato lo spazio dei nomi definito in 'assembly'.
- CS0436: il tipo 'type' in 'assembly' è in conflitto con il tipo importato 'type2' in 'assembly'. Uso del tipo definito in 'assembly'.
- CS0437: Il tipo 'type' nel 'assembly2' è in conflitto con lo spazio dei nomi importato 'namespace' nel 'assembly1'. Verrà utilizzato il tipo definito in 'assembly'.
- CS0438: il tipo 'type' in 'module_1' è in conflitto con lo spazio dei nomi 'namespace' in 'module_2'.
Vedere la direttiva using, alias extern e il riferimento al linguaggio qualificatore di alias dello spazio dei nomi per le regole che governano queste diagnostiche. Le possibili correzioni includono:
- Usare un nome qualificato completo o un alias dello spazio dei nomi quando il codice fa riferimento a un nome presente in più spazi dei nomi importati.
- Il compilatore non è in grado di determinare il tipo che si intende usare quando lo stesso nome viene visualizzato in due o più spazi dei nomi importati dalle
usingdirettive (CS0104). - Rinominare il tipo o lo spazio dei nomi quando un tipo importato e uno spazio dei nomi annidato importato condividono lo stesso nome completo. Il compilatore non può distinguere tra di essi quando viene fatto riferimento al nome (CS0434, CS0438).
Per risolvere gli avvisi di conflitto di denominazione, rinominare una delle dichiarazioni in conflitto, usare uno spazio dei nomi diverso, rimuovere il riferimento all'assembly non necessario o usare un alias extern per disambiguare tra le due definizioni. Il compilatore risolve automaticamente questi conflitti, usando lo spazio dei nomi definito localmente sul tipo importato (CS0435), il tipo definito localmente sul tipo importato (CS0436) o il tipo definito localmente sullo spazio dei nomi importato (CS0437), ma gli avvisi indicano una potenziale fonte di confusione da risolvere.
Importazioni di tipi predefinite
L'errore seguente si riferisce alle definizioni di tipi predefinite mancanti:
- CS0518: il tipo predefinito 'type' non è definito o importato.
Annotazioni
Questo avviso viene segnalato solo durante le operazioni di compilazione o ricompilazione esplicite. Non viene visualizzato durante la digitazione nell'IDE come parte della diagnostica di IntelliSense. Ciò significa che se si corregge l'avviso usando il campo o rimuovendolo, l'avviso potrebbe persistere nell'elenco degli errori fino a quando non si compila o si ricompila nuovamente il progetto.
Per le regole che regolano questa diagnostica, vedere le informazioni di riferimento sul linguaggio delle opzioni del compilatore NoStandardLib .
Verificare che il progetto sia destinato al runtime .NET corretto. Tipi predefiniti come System.Int32 e System.String provengono dalla libreria di runtime. Una specifica errata o mancante <TargetFramework> impedisce al compilatore di trovare questi tipi (CS0518). Verificare che la <TargetFramework> proprietà nel .csproj file specifichi il runtime previsto , ad esempio net10.0. Non specificare l'opzione del compilatore NoStandardLib a meno che non si intenda definire uno spazio dei nomi personalizzato System . Questa opzione impedisce l'importazione della libreria standard che definisce tutti i tipi predefiniti (CS0518). Se l'errore persiste, provare a ricaricare il progetto in Visual Studio, eliminare le obj cartelle e bin e ricompilare il progetto o reinstallare il runtime .NET (CS0518).