Compartir a través de


Resolución de advertencias relacionadas con el uso y declaración de espacios de nombres

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 static directiva solo se puede aplicar a los tipos. Considere una using namespace directiva 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 static debe preceder al modificador unsafe.
  • 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 global es desacertado dado que global:: 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 using directivas a la parte superior del archivo o a la parte superior de la declaración de espacio de nombres. El lenguaje C# requiere using que las directivas precedan a otros elementos dentro de un espacio de nombres (CS1529).
  • Mueva todas las extern alias declaraciones antes de cualquier using directiva. El lenguaje requiere que los alias externos aparezcan antes de todos los demás elementos, incluidas las using directivas (CS0439, CS7015).
  • Mueva todos los atributos de nivel de ensamblado y de módulo después de las cláusulas using y las declaraciones extern 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 alias declaraciones 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 /reference para 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 /reference opció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 global alias extern. global es 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 alias sin 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 static directiva solo se puede aplicar a los tipos. Considere una using namespace directiva en su lugar.
  • CS9133: El modificador static debe preceder al modificador unsafe.
  • 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 static modificador al importar directamente los miembros de un tipo, ya que omitir static indica al compilador que va a importar un espacio de nombres en lugar de un tipo (CS0138).
  • Quite el static modificador al importar un espacio de nombres, ya que using static solo se puede aplicar a tipos, no a espacios de nombres (CS7007). Asegúrese de que el destino de una using static directiva es una clase, estructura, interfaz, enumeración o delegado, porque otros tipos no son destinos válidos para importaciones estáticas (CS9162).
  • Coloque el static modificador antes del unsafe modificador 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 using fuera 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 using directivas antes de cualquier directiva no global using en el archivo, ya que el lenguaje requiere directivas globales para preceder a las locales (CS8915).
  • Tenga en cuenta que una static global using directiva 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 que global:: 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 using directiva o extern 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 que global está 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 ref tipo.
  • 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 static modificador al declarar un alias, ya que los alias y las importaciones estáticas son mutuamente excluyentes: use using static para importar miembros o using 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, o out en un alias mediante 'using', porque estos modificadores de parámetro no son válidos en contextos de alias de tipo (CS9130).
  • Use el unsafe modificador solo con alias que hagan referencia a tipos de puntero o con using static directivas, porque unsafe no 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 using directivas (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 public o private, 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).