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:
- CS0101: Error: el espacio de nombres 'namespace' ya contiene una definición para 'identificador'
- 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.
- CS0138: Error: Una directiva using namespace 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 de espacio de nombres
::siempre se resuelve como un tipo o un espacio de nombres, por lo que no es válido aquí. Considera utilizar.en su lugar. - CS1022: Error: Definición de tipo o espacio de nombres, o fin de archivo esperado.
- CS1527: Error: Los elementos definidos en un espacio de nombres no pueden declararse explícitamente como private, protected, protected internal o private protected
- 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 "alias" de la directiva using ya ha aparecido anteriormente 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.
- CS7016: Error: Alias 'alias' entra en conflicto con la definición del tipo de símbolo
- 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 fuente no puede contener tanto declaraciones de espacio de nombres con ámbito de archivo como declaraciones normales.
- 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
reftipo. -
CS9131: Error: Solo un alias using puede ser
unsafe. - CS9132: Error: El alias using no puede ser un tipo de referencia nulo.
-
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.
- CS9348: una unidad de compilación no puede contener directamente miembros como campos, métodos o propiedades
Y las siguientes advertencias del compilador:
- CS0105: Advertencia: La directiva using para namespace ya ha aparecido anteriormente en este espacio de nombres.
- CS0435: Advertencia: El espacio de nombres namespace en assembly entra en conflicto con el tipo importado type en assembly. Se utiliza el espacio de nombres definido en assembly.
- 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. Se utiliza 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 las directivas using, con las declaraciones en unidades de compilación y en espacios de nombres, o con conflictos de nombres 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 directiva using para namespace ya ha aparecido 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 ya ha aparecido anteriormente como using global.
Consulte la referencia del lenguaje sobre la directiva using y el 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). Incluye un nombre de archivo después del signo=en 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 using static
Los errores siguientes se relacionan con las directivas using static.
- CS0138: Una directiva using namespace solo se puede aplicar a espacios de nombres; type 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.
Consulta la referencia del lenguaje sobre la directiva using static para conocer 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 using global
Los errores siguientes se relacionan con las directivas global using.
- CS8914: No se puede utilizar una directiva using global en una declaración de espacio de nombres.
- CS8915: Una directiva using global debe preceder a todas las directivas using no globales.
Consulte la referencia del lenguaje sobre la 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). - Una
static global usingdirectiva no puede hacer referencia a un tipo local de archivo .
Espacio de nombres con ámbito de archivo
Los siguientes errores están relacionados con los espacios de nombres con á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 fuente no puede contener simultáneamente declaraciones de espacio de nombres con ámbito de archivo y declaraciones normales de espacio de nombres.
- CS8956: El espacio de nombres con ámbito de archivo debe preceder a todos los demás miembros de un archivo.
Consulta la referencia del lenguaje sobre el espacio 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 entre declaraciones de espacios de nombres con ámbito de archivo o con ámbito de bloque dentro de un mismo archivo, ya que el lenguaje no permite mezclar ambos estilos (CS8955).
- Mueva la declaración del 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 calificador de alias de espacio de nombres
::siempre se resuelve en un tipo o un espacio de nombres, por lo que es ilegal en este contexto. Considere la posibilidad de utilizar.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 sobre el calificador de alias de espacio de nombres para conocer 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 "alias" ya ha aparecido anteriormente en este espacio de nombres.
- CS7016: El alias 'alias' entra en conflicto con la definición de tipo de símbolo
- 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.
Consulta la referencia del lenguaje sobre el alias using para conocer las reglas que rigen estos mensajes de diagnóstico. 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).
- En el script o en el código enviado, cambie el nombre del alias de using o del miembro en conflicto del código enviado, de modo que ambos nombres sean únicos (CS7016). El diagnóstico identifica el tipo de miembro, como
fieldotype. - 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,inoouten un alias using, ya que estos modificadores de parámetros no son válidos en contextos de alias de tipo (CS9130). - Utiliza el modificador
unsafeúnicamente con alias que hagan referencia a tipos de puntero o con directivasusing static, ya queunsafesin un alias o una importación estática no está permitido (CS9131) . - Utilice un tipo de referencia no nulo al crear un alias para un tipo de referencia, ya que los tipos de referencia nulos no pueden ser alias directamente (CS9132).
Declaraciones de unidad de compilación y espacio de nombres
Los errores siguientes se relacionan con las declaraciones en unidades de compilación y espacios 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.
- CS1527: Los elementos definidos en un espacio de nombres no se pueden declarar explícitamente como privados, protegidos, protegidos internos o privados protegidos.
- 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.
- CS9348: una unidad de compilación no puede contener directamente miembros como campos, métodos o propiedades.
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). - Mueva campos, propiedades, eventos, indizadores, operadores y métodos miembro a una clase, estructura, registro o interfaz (CS9348). En el ámbito de la unidad de compilación, el código ejecutable puede ser una instrucción de nivel superior en el espacio de nombres global y una declaración con forma de método es una función local en lugar de un método miembro.
- 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).
- Cambie la accesibilidad de un tipo de espacio de nombres a
publicointernalo omita el modificador de acceso para usar la accesibilidad predeterminadainternal(CS1527). Los tipos declarados sin un espacio de nombres explícito son miembros del espacio de nombres global, por lo que se aplica la misma restricción. - 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 nombres de espacios de nombres y de tipos
Los errores y advertencias siguientes se relacionan con los conflictos de nomenclatura entre los espacios de nombres y los tipos:
- CS0101: El espacio de nombres 'namespace' ya contiene una definición de 'identificador'
- CS0104: reference es una referencia ambigua entre identifier e 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 utiliza 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 referencia del lenguaje sobre la directiva using, el alias extern y el calificador de alias de espacio de nombres para conocer las reglas que rigen estos diagnósticos. Entre las posibles correcciones se incluyen las siguientes:
- Utilice 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 o elimine un miembro duplicado del espacio de nombres (CS0101). Un espacio de nombres y un tipo tampoco pueden tener el mismo nombre completo, por lo que cambiar el nombre de una declaración cuando un nombre de tipo entra en conflicto con un nombre de espacio de nombres anidado.
- Cambie el nombre del tipo o del espacio de nombres cuando un tipo importado y un espacio de nombres anidado importado compartan 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 utilizando el campo o eliminándolo, la advertencia podría persistir en la lista de errores hasta que compile o vuelva a compilar el proyecto.
Consulte la referencia del lenguaje sobre la opción del compilador NoEstándarLib 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).