Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se tratan los siguientes errores del compilador:
- CS0104: Error: 'reference' es una referencia ambigua entre 'identifier' y 'identifier'.
- CS0116: Error: un espacio de nombres no puede contener directamente miembros como campos, métodos o instrucciones.
- CS0138Error: Una directiva de espacio de nombres using solo se puede aplicar a espacios de nombres. ”type” es un tipo, no un espacio de nombres.
- CS0430: Error: El alias extern 'alias' no se especificó en una opción /reference.
-
CS0431: Error: No se puede usar el alias ”identifier” con
::, dado que el alias hace referencia a un tipo. Use en su lugar.. - CS0432Error: No se encontró el alias ”identifier”.
- CS0434: Error: el espacio de nombres NamespaceName1 de NamespaceName2 entra en conflicto con el tipo TypeName1 en NamespaceName3.
- CS0438: Error: el tipo "type" en "module_1" entra en conflicto con el espacio de nombres "namespace" en "module_2".
- CS0439: Error: Una declaración de alias extern debe preceder a todos los demás elementos definidos en el espacio de nombres.
- CS0518: Error: El tipo predefinido 'type' no está definido ni importado.
- CS0576Error: El espacio de nombres ”namespace” contiene una definición que entra en conflicto con el alias ”identifier”..
-
CS0687: Error: El calificador de alias del espacio de nombres
::siempre se resuelve en un tipo o espacio de nombres, por tanto, aquí no es válido. Considere usar en su lugar.. - CS1022: Error: Definición de tipo o espacio de nombres, o fin de archivo esperado.
- CS1529: Error: Una cláusula using debe preceder al resto de elementos definidos en el espacio de nombres, excepto las declaraciones de alias externos.
- CS1537: Error: El alias de using ”alias” aparece previamente en este espacio de nombres.
- CS1671: Error: Una declaración de espacio de nombres no puede tener modificadores o atributos.
- CS1679: Error: Alias extern no válido para '/reference'; 'identifier' no es un identificador válido.
- CS1680: Error: Opción de alias de referencia no válida: 'alias=' -- falta nombre de archivo.
- CS1681: Error: No se puede redefinir el alias de extern global.
- CS1730: Error: Los atributos de ensamblado y módulo deben preceder a todos los demás elementos definidos en un archivo, excepto mediante cláusulas y declaraciones de alias extern.
- CS2034: Error: una opción /reference que declara un alias extern solo puede tener un nombre de archivo. Para especificar varios alias o nombres de archivo, use varias opciones de /reference.
- CS7000: Error: Uso inesperado de un nombre con alias.
-
CS7007: Error: Una
using staticdirectiva solo se puede aplicar a los tipos. Considere unausing namespacedirectiva en su lugar. - CS7015: Error: "alias extern" no es válido en este contexto.
- CS7021: Error: No se puede declarar el espacio de nombres en el código de script.
- CS8083: Error: Un nombre calificado con el alias no es una expresión.
- CS8085: Error: No se puede usar una directiva ”using static” para declarar un alias.
- CS8914: Error: No se puede usar una directiva using global en una declaración de espacio de nombres.
- CS8915: Error: Una directiva using global debe preceder a todas las directivas using no globales.
- CS8954: Error: el archivo de origen solo puede contener una declaración de espacio de nombres delimitado por archivo.
- CS8955: Error: El archivo de origen no puede contener declaraciones de espacio de nombres normales y con ámbito de archivo.
- CS8956: Error: El espacio de nombres con ámbito de archivo debe preceder a todos los demás miembros de un archivo.
-
CS9130: Error: El alias 'using' no puede ser un tipo
ref. -
CS9131: Error: Solo un alias using puede ser
unsafe. - CS9132: Error: El alias de using no puede ser un tipo de referencia nula.
-
CS9133: Error: El modificador
staticdebe preceder al modificadorunsafe. - CS9162: El tipo no es válido para "using static". Solo se puede usar una clase, estructura, interfaz, enumeración, delegado o espacio de nombres.
Y las siguientes advertencias del compilador:
- CS0105: Advertencia: La directiva using para ”namespace” aparece previamente en este espacio de nombres.
- CS0435: Advertencia: el espacio de nombres 'namespace' en 'ensamblado' entra en conflicto con el tipo importado 'tipo' en 'ensamblado'. Se utilizará el espacio de nombres definido en 'ensamblado'.
- CS0436: Advertencia: el tipo 'type' en 'assembly' entra en conflicto con el tipo importado 'type2' en 'assembly'. Se está utilizando el tipo definido en 'assembly'.
- CS0437: Advertencia: el tipo 'type' en 'assembly2' entra en conflicto con el espacio de nombres importado 'namespace' en 'assembly1'. Usando el tipo definido en 'assembly'.
-
CS0440: Advertencia: Definir un alias llamado
globales desacertado dado queglobal::siempre hace referencia al espacio de nombres global y no a un alias. - CS8019: Información: Directiva using innecesaria.
- CS8020: Información: alias extern sin usar.
- CS8933: Información: La directiva using aparecía anteriormente como global using.
Estos errores y advertencias indican problemas con directivas using, declaraciones de espacio de nombres o conflictos de denominación entre tipos y espacios de nombres. En las secciones siguientes se describen estos errores y cómo corregirlos.
Directiva using
Los errores siguientes se relacionan con las directivas using.
- CS0105: La instrucción using para "espacio de nombres" apareció anteriormente en este espacio de nombres.
- CS0430: el alias extern 'alias' no se especificó en una opción /reference.
- CS0439: Una declaración de alias extern debe preceder a todos los demás elementos definidos en el espacio de nombres.
- CS1529: Una cláusula using deberá preceder a todos los demás elementos definidos en el namespace, excepto las declaraciones de alias extern.
- CS1679: alias extern no válido para '/reference'; 'identifier' no es un identificador válido.
- CS1680: opción de alias de referencia no válida: 'alias=' -- falta nombre de archivo.
- CS1681: No se puede redefinir el alias externo global.
- CS1730: los atributos de ensamblado y módulo deben preceder a todos los demás elementos definidos en un archivo, excepto mediante cláusulas y declaraciones de alias extern.
- CS2034: una opción /reference que declara un alias extern solo puede tener un nombre de archivo. Para especificar varios alias o nombres de archivo, use varias opciones de /reference.
- CS7015: "alias extern" no es válido en este contexto.
- CS8019: Directiva using innecesaria.
- CS8020: alias extern sin usar.
- CS8933: La directiva using apareció anteriormente como global using.
Consulte la referencia del lenguaje de la directiva using y alias extern para conocer las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Mueva todas las
usingdirectivas a la parte superior del archivo o a la parte superior de la declaración de espacio de nombres. El lenguaje C# requiereusingque las directivas precedan a otros elementos dentro de un espacio de nombres (CS1529). - Mueva todas las
extern aliasdeclaraciones antes de cualquierusingdirectiva. El lenguaje requiere que los alias externos aparezcan antes de todos los demás elementos, incluidas lasusingdirectivas (CS0439, CS7015). - Mueva todos los atributos de nivel de ensamblado y de módulo después de las cláusulas
usingy las declaracionesextern alias, pero antes de cualquier declaración de tipo. Los atributos deben seguir las directivas, pero preceden a los tipos (CS1730). - Asegúrese de que todas las
extern aliasdeclaraciones del código fuente tengan un alias correspondiente definido en las opciones de referencia del proyecto. El compilador no puede resolver un alias que no se especificó (CS0430). - Use una opción independiente
/referencepara cada alias de extern en lugar de combinar varios alias en una sola opción. El compilador requiere un alias por opción de referencia (CS2034). - Asegúrese de que el alias de la
/referenceopción es un identificador de C# válido. El alias debe seguir las reglas de nomenclatura de identificadores (CS1679). Incluya un nombre de archivo después de la opción de referencia de alias=. El compilador debe saber a qué ensamblado hace referencia el alias (CS1680). - No intente volver a definir el
globalalias extern.globales un alias predefinido que hace referencia a todas las referencias no relacionadas (CS1681). - Elimine las directivas duplicadas
using. El compilador advierte cuando se importa el mismo espacio de nombres varias veces (CS0105, CS8019, CS8933). - Quite las declaraciones
extern aliassin usar. El compilador emite un diagnóstico cuando se declara un alias extern, pero nunca se hace referencia a él en el código (CS8020).
Directiva estática using
Errores siguientes en las directivas using static:
- CS0138: Una directiva 'using namespace' solo se puede aplicar a los espacios de nombres; 'tipo' es un tipo, no un espacio de nombres.
-
CS7007: una
using staticdirectiva solo se puede aplicar a los tipos. Considere unausing namespacedirectiva en su lugar. -
CS9133: El modificador
staticdebe preceder al modificadorunsafe. - CS9162: El tipo no es válido para "using static". Solo se puede usar una clase, estructura, interfaz, enumeración, delegado o espacio de nombres.
Consulte la referencia del lenguaje sobre la using static directive para las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Agregue el
staticmodificador al importar directamente los miembros de un tipo, ya que omitirstaticindica al compilador que va a importar un espacio de nombres en lugar de un tipo (CS0138). - Quite el
staticmodificador al importar un espacio de nombres, ya queusing staticsolo se puede aplicar a tipos, no a espacios de nombres (CS7007). Asegúrese de que el destino de unausing staticdirectiva es una clase, estructura, interfaz, enumeración o delegado, porque otros tipos no son destinos válidos para importaciones estáticas (CS9162). - Coloque el
staticmodificador antes delunsafemodificador al combinar ambos, ya que el lenguaje requiere modificadores en un orden específico (CS9133).
Directiva global using
Los siguientes errores se relacionan con las directivas global using.
- CS8914: no se puede usar una directiva using global en una declaración de espacio de nombres.
- CS8915: una directiva de uso global debe preceder a todas las directivas using no globales.
Consulte la referencia del lenguaje de directiva using global para conocer las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Mueva las directivas
global usingfuera de todas las declaraciones de espacio de nombres al nivel de archivo, ya que los usos globales se aplican a todo el proyecto y no se pueden limitar a un espacio de nombres (CS8914). - Coloque todas las
global usingdirectivas antes de cualquier directiva no globalusingen el archivo, ya que el lenguaje requiere directivas globales para preceder a las locales (CS8915). - Tenga en cuenta que una
static global usingdirectiva no puede hacer referencia a un tipo local de archivo.
Espacio de nombres con ámbito de archivo
Los errores siguientes se relacionan con los espacios de nombres de ámbito de archivo.
- CS8954: El archivo de origen solo puede contener una declaración de espacio de nombres a nivel de archivo.
- CS8955: el archivo de origen no puede contener declaraciones de espacio de nombres normal y con ámbito de archivo.
- CS8956: el espacio de nombres con ámbito de archivo debe preceder a todos los demás miembros de un archivo.
Consulte la referencia del lenguaje sobre espacios de nombres con ámbito de archivo para conocer las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Use solo una declaración de espacio de nombres con ámbito de archivo por archivo, ya que el lenguaje solo permite que un único espacio de nombres con ámbito de archivo establezca el espacio de nombres para todos los tipos de un archivo (CS8954).
- Elija declaraciones de espacio de nombres con ámbito de archivo o de ámbito de bloque dentro de un único archivo, ya que el lenguaje no permite mezclar ambos estilos (CS8955).
- Mueva la declaración de espacio de nombres con ámbito de archivo antes de cualquier declaración de tipo, ya que el espacio de nombres debe establecerse antes de declarar los tipos (CS8956).
Calificador de alias
Los errores siguientes están relacionados con el calificador de alias:
-
CS0431: No se puede usar el alias 'identifier' con
::, ya que el alias hace referencia a un tipo. Use.en su lugar. - CS0432: No se encontró el alias 'identifier'.
-
CS0440: No se recomienda definir un alias denominado
global, ya queglobal::siempre hace referencia al espacio de nombres global y no a un alias. -
CS0687: El cualificador de alias de un espacio de nombres siempre se resuelve en un tipo o espacio de nombres, por lo que no es válido aquí. Considere usar
.en su lugar. - CS7000: uso inesperado de un nombre con alias.
- CS8083: Un nombre calificado por alias no es una expresión.
Consulte la referencia del lenguaje calificador de alias de espacio de nombres para las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Reemplaza el operador
::por el operador.cuando accedas a los miembros de un alias de tipo, ya que el calificador::solo es válido para alias de espacio de nombres, no para alias de tipo (CS0431, CS0687). - Asegúrese de que el alias al que hace referencia se declara con una
usingdirectiva oextern alias, porque el compilador no puede resolver un alias indefinido (CS0432). - Use el calificador de alias solo en contextos en los que se espera un nombre de tipo o espacio de nombres, ya que los nombres calificados por alias no son válidos como expresiones (CS7000, CS8083).
- Elija otro nombre para el alias en lugar de
global, ya queglobalestá reservado para hacer referencia al espacio de nombres global y no se puede volver a definir (CS0440).
Uso de restricciones de alias
Los errores siguientes se relacionan con las restricciones de uso de alias:
- CS0576: El espacio de nombres 'namespace' contiene una definición que entra en conflicto con el alias 'identificador'.
- CS1537: el alias de uso "alias" apareció anteriormente en este espacio de nombres.
- CS8085: no se puede usar una directiva "using static" para declarar un alias.
-
CS9130: El alias usado no puede ser de un
reftipo. -
CS9131: solo un alias de uso puede ser
unsafe. - CS9132: El uso de alias no puede ser un tipo de referencia que acepta valores NULL.
Consulte la referencia del lenguaje de alias using para conocer las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Elija un nombre único para el alias que no entre en conflicto con los nombres de tipo o espacio de nombres existentes en el ámbito, ya que el compilador no puede distinguir entre el alias y la definición existente (CS0576).
- Use cada nombre de alias solo una vez dentro de un espacio de nombres, ya que las declaraciones de alias duplicadas crean ambigüedad (CS1537).
- Quite el
staticmodificador al declarar un alias, ya que los alias y las importaciones estáticas son mutuamente excluyentes: useusing staticpara importar miembros ousing Alias =para crear un alias, pero no ambos juntos (CS8085).
A partir de C# 12, se aplican las restricciones siguientes al uso de alias:
- No utilices los modificadores
ref,in, oouten un alias mediante 'using', porque estos modificadores de parámetro no son válidos en contextos de alias de tipo (CS9130). - Use el
unsafemodificador solo con alias que hagan referencia a tipos de puntero o conusing staticdirectivas, porqueunsafeno está permitido sin un alias o importación estática (CS9131). - Use un tipo de referencia que no acepta valores NULL al crear un alias a un tipo de referencia, ya que los tipos de referencia que aceptan valores NULL no se pueden alias directamente (CS9132).
Declaraciones de espacio de nombres
Los errores siguientes se relacionan con las reglas de declaración del espacio de nombres:
- CS0116: un espacio de nombres no puede contener directamente miembros como campos, métodos o instrucciones.
- CS1022: Definición de tipo o espacio de nombres, o fin de archivo esperado.
- CS1671: una declaración de espacio de nombres no puede tener modificadores ni atributos.
- CS7021: no se puede declarar el espacio de nombres en el código de script.
Consulte la palabra clave del espacio de nombres y la estructura general de una referencia del lenguaje del programa de C# para conocer las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Asegúrese de que todos los métodos, campos y propiedades se declaran dentro de un tipo (clase, estructura, registro o interfaz) en lugar de directamente dentro de un espacio de nombres, ya que los espacios de nombres solo pueden contener declaraciones de tipo, espacios de nombres anidados y
usingdirectivas (CS0116). - Compruebe si hay llaves no coincidentes en el archivo de origen, ya que una llave de cierre adicional después de un espacio de nombres o una definición de tipo produce un error cuando el compilador encuentra contenido inesperado al final del archivo (CS1022).
- Quite los modificadores de acceso o atributos de las declaraciones de espacio de nombres, ya que los espacios de nombres no admiten modificadores como
publicoprivate, y los atributos no se pueden aplicar a ellos (CS1671). - Mueva las declaraciones de espacio de nombres fuera de los archivos de script de C# (
.csx) y a archivos de código fuente normales (.cs), ya que el código de script se evalúa en un único contexto de ejecución que no admite declaraciones de espacio de nombres (CS7021).
Conflictos de nomenclatura de espacios de nombres y tipos
Los errores y advertencias siguientes se relacionan con los conflictos de nomenclatura entre los espacios de nombres y los tipos:
- CS0104: 'reference' es una referencia ambigua entre 'identifier' y 'identifier'.
- CS0434: el espacio de nombres NamespaceName1 de NamespaceName2 entra en conflicto con el tipo TypeName1 en NamespaceName3.
- CS0435: El espacio de nombres 'namespace' en 'assembly' entra en conflicto con el tipo importado 'type' en 'assembly'. Se utilizará el espacio de nombres definido en 'assembly'.
- CS0436: El tipo 'type' en 'assembly' entra en conflicto con el tipo importado 'type2' en 'assembly'. Se utilizará el tipo definido en 'assembly'.
- CS0437: El tipo 'type' en 'assembly2' entra en conflicto con el espacio de nombres importado 'namespace' en 'assembly1'. Se utilizará el tipo definido en 'assembly'.
- CS0438: el tipo "type" en "module_1" entra en conflicto con el espacio de nombres "namespace" en "module_2".
Consulte la directiva using, el alias extern y la referencia del lenguaje para el calificador de alias de espacio de nombres para las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Use un nombre completo o un alias de espacio de nombres cuando su código haga referencia a un nombre que exista en varios espacios de nombres importados.
- El compilador no puede determinar qué tipo pretende utilizar cuando el mismo nombre aparece en dos o más espacios de nombres que son importados por directivas
using(CS0104). - Cambie el nombre del tipo o del espacio de nombres cuando un tipo importado y un espacio de nombres anidado importado comparta el mismo nombre completo. El compilador no puede distinguir entre ellos cuando se hace referencia al nombre (CS0434, CS0438).
Para resolver las advertencias de conflicto de nomenclatura, cambie el nombre de una de las declaraciones en conflicto, use un espacio de nombres diferente, quite la referencia de ensamblado innecesaria o use un alias extern para desambiguar entre las dos definiciones. El compilador resuelve estos conflictos automáticamente, mediante el espacio de nombres definido localmente sobre el tipo importado (CS0435), el tipo definido localmente sobre el tipo importado (CS0436) o el tipo definido localmente sobre el espacio de nombres importado (CS0437), pero las advertencias indican un posible origen de confusión que debe abordar.
Importaciones de tipos predefinidos
El siguiente error se relaciona con las definiciones de tipo predefinidas que faltan:
- CS0518: El tipo predefinido 'type' no está definido ni importado.
Nota:
Esta advertencia solo se notifica durante las operaciones explícitas de compilación o recompilación . No aparece mientras se escribe en el IDE como parte de los diagnósticos de IntelliSense. Esto significa que, si corrige la advertencia usando el campo o eliminándolo, la advertencia podría persistir en la lista de errores hasta que vuelva a (re)compilar el proyecto.
Consulte la referencia del compilador NoStandardLib para conocer las reglas que rigen este diagnóstico.
Compruebe que el proyecto tiene como destino el entorno de ejecución de .NET correcto. Tipos predefinidos como System.Int32 y System.String proceden de la biblioteca en tiempo de ejecución. Una especificación incorrecta o que falta <TargetFramework> impide que el compilador busque estos tipos (CS0518). Asegúrese de que la propiedad <TargetFramework> en su archivo .csproj especifica el entorno de ejecución previsto (por ejemplo, net10.0). No especifique la opción del compilador NoStandardLib a menos que quiera definir su propio System espacio de nombres. Esta opción impide importar la biblioteca estándar que define todos los tipos predefinidos (CS0518). Si el error persiste, intente volver a cargar el proyecto en Visual Studio, elimine las obj carpetas y bin y vuelva a generar el proyecto o vuelva a instalar el entorno de ejecución de .NET (CS0518).