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.
Los errores siguientes se producen cuando el compilador carga generadores de origen o interceptores durante la compilación:
-
CS9137: La característica "interceptores" no está habilitada en este espacio de nombres. Agregue
<Features>InterceptorsPreview</Features>al proyecto. - CS9138: el método 'method' no se puede usar como interceptor porque su tipo contenedor tiene parámetros de tipo.
- CS9139: No se puede interceptar: la compilación no contiene un archivo con ruta de acceso.
- CS9140: No se puede interceptar: la compilación no contiene un archivo con la ruta de acceso "path". ¿Quieres usar la ruta de acceso 'candidatePath'?
- CS9141: el número de línea y carácter proporcionados no hace referencia a un nombre de método interceptable, sino al token "token".
-
CS9142: el archivo especificado tiene
nlíneas, que es menor que el númeromde línea proporcionado. -
CS9143: La línea especificada tiene
ccaracteres de longitud, que es menor que el número de caracteres proporcionadosn. -
CS9144: no se puede interceptar el método
Mcon interceptorVporque las firmas no coinciden. - CS9145: No se puede interceptar: la ruta de acceso no está asignada. Se esperaba una ruta de acceso asignada.
- CS9146: un método interceptor debe ser un método miembro normal.
- CS9147: el número de línea y carácter proporcionados no hace referencia al inicio del token "token". ¿Quieres usar la línea 'n' y el carácter 'c'?
-
CS9148:
this -
CS9149: Interceptor no debe tener un
thisparámetro porque el método no tiene unthisparámetro . -
CS9150: Interceptor no puede tener una
nullruta de acceso de archivo. -
CS9151: No se puede interceptar el nombre de método posible
Mporque no está siendo invocado. - CS9152: no se puede interceptar una llamada en el archivo con la ruta de acceso "path" porque varios archivos de la compilación tienen esta ruta de acceso.
- CS9153: la llamada indicada se intercepta varias veces.
-
CS9155: no se puede interceptar la llamada con
Mporque no es accesible enV. -
CS9156: No se puede interceptar la llamada a
MutilizandoVdebido a una diferencia en los modificadores 'scoped' o los atributos[UnscopedRef]. -
CS9157: los números de línea y caracteres proporcionados para
InterceptsLocationAttributedeben ser positivos. - CS9160: no se puede interceptar un operador nameof.
-
CS9161: no se puede marcar un interceptor con
UnmanagedCallersOnlyAttribute. - CS9177: El método 'method' debe ser no genérico o tener aridad 'arity' para que coincida con 'target'.
- CS9178: el método 'method' debe ser no genérico para que coincida con 'target'.
- CS9206: no se puede declarar un interceptor en el espacio de nombres global.
- CS9207: No se puede interceptar 'method' porque no es una invocación de un método miembro ordinario.
- CS9231: el argumento de datos de InterceptsLocationAttribute no tiene el formato correcto.
- CS9232: no se admite la versión "version" del formato de interceptores. La versión más reciente admitida es "1".
- CS9233: no se puede interceptar una llamada en el archivo "file" porque está duplicada en otro lugar de la compilación.
- CS9234: no se puede interceptar una llamada en el archivo 'file' porque no se encontró un archivo coincidente en la compilación.
- CS9235: el argumento de datos de InterceptsLocationAttribute hace referencia a una posición no válida en el archivo 'file'.
Las advertencias siguientes se producen cuando el compilador carga generadores de origen o interceptores durante la compilación:
- CS8032: no se puede crear una instancia del analizador 'analyzer' a partir de 'assembly': 'reason'.
- CS8033: El ensamblado 'assembly' no contiene ningún analizador.
- CS8034: No se puede cargar el ensamblado del analizador 'assembly': 'reason'
- CS8040: Se omiten algunos tipos en el ensamblado del analizador 'assembly' debido a una ReflectionTypeLoadException : 'exception'.
- CS8700: Varios archivos de configuración del analizador no pueden estar en el mismo directorio ("directorio").
- CS8784: No se pudo inicializar el generador 'generator'. No contribuirá a la salida y, como resultado, pueden producirse errores de compilación. La excepción fue de tipo 'exception' con el mensaje 'message'.
- CS8785: El generador 'generator' no pudo generar código fuente. No contribuirá a la salida y, como resultado, pueden producirse errores de compilación. La excepción era de tipo 'exception' con el mensaje 'message'.
- CS8850: El ensamblado 'assembly' que contiene el tipo 'type' hace referencia a .NET Framework, que no es compatible.
- CS9057: No se puede usar el ensamblado del analizador 'assembly' porque hace referencia a la versión 'version' del compilador, que es más reciente que la versión que se está ejecutando actualmente, 'currentVersion'.
- CS9067: La referencia del analizador 'reference' se ha especificado varias veces
-
CS9154: Interceptar una llamada a
Mcon interceptorV, pero las firmas no coinciden. - CS9158: La nulabilidad de los tipos de referencia en el tipo de retorno no coincide con el método interceptable.
- CS9159: la nulabilidad de los tipos de referencia en el tipo de parámetro no coincide con el método interceptable.
-
CS9270: no se admite '
InterceptsLocationAttribute(string, int, int)'. Vaya a la generación basada en "InterceptableLocation" de estos atributos en su lugar. (https://github.com/dotnet/roslyn/issues/72133)
Estos errores y advertencias siguen estos temas:
Errores del generador de origen
- CS8784: No se pudo inicializar el generador "generator". No contribuirá a la salida y, como resultado, pueden producirse errores de compilación. Se produjo una excepción del tipo "exception" con el mensaje "message".
- CS8785: El generador 'generator' no pudo generar el código fuente. No contribuirá a la salida y, como resultado, pueden producirse errores de compilación. Se produjo una excepción del tipo 'exception' con el mensaje 'message'.
Estas advertencias indican que un generador de origen produjo una excepción no controlada durante la compilación. Los generadores de código fuente se ejecutan como parte del proceso de compilación, y un fallo impide que el generador aporte su salida a la compilación. Para obtener más información sobre la implementación de generadores de origen, consulte Generadores de origen.
Para corregir estas advertencias, siga estas instrucciones:
- Examine los detalles completos de la excepción en la salida de compilación para identificar la causa principal (CS8784, CS8785). El mensaje de advertencia incluye el tipo de excepción, el mensaje y el seguimiento de pila, que pueden ayudarle a usted o al autor del generador a diagnosticar el error.
- Asegúrese de que todas las dependencias necesarias para el generador de origen están disponibles en el proyecto (CS8784). Los errores de inicialización a menudo se producen cuando el generador no puede encontrar un ensamblado o recurso necesario durante el inicio. Compruebe que el paquete NuGet del generador está instalado correctamente y que se resuelven todas las dependencias transitivas.
- Notifique el error en el mantenedor del generador de origen si la excepción se origina en el código del generador de terceros (CS8784, CS8785). Incluya en el informe de errores los detalles completos de la excepción que aparecen en la salida de compilación.
- Si creó el generador de código fuente, agregue manejo de excepciones dentro de sus métodos
InitializeoExecutepara capturar e informar de los errores de forma adecuada (CS8784, CS8785).
Compatibilidad con el analizador y el generador de origen
- CS8032: no se puede crear una instancia del analizador 'analyzer' a partir de 'assembly': 'reason'.
- CS8033: El ensamblado 'assembly' no contiene analizadores.
- CS8034: No se puede cargar el ensamblado del analizador 'assembly': 'reason'
- CS8040: Se omiten algunos tipos del ensamblado del analizador 'assembly' debido a una ReflectionTypeLoadException: 'exception'.
- CS8700: Varios archivos de configuración del analizador no pueden estar en el mismo directorio ("directorio").
- CS8850: El ensamblado "assembly" que contiene el tipo "type" hace referencia a .NET Framework, que no es compatible.
- CS9057: No se puede usar el ensamblado de analizador "assembly" porque hace referencia a la versión "version" del compilador, que es más reciente que la versión que se está ejecutando actualmente, "currentVersion".
- CS9067: La referencia del analizador 'reference' se ha especificado varias veces
Estas advertencias y errores indican problemas de carga, creación de instancias o configuración de ensamblados de generador de origen y analizador. Dado que los generadores de origen se cargan como ensamblados de analizador, estos diagnósticos se aplican tanto a los analizadores como a los generadores de origen.
Para corregir estos problemas, siga estas instrucciones:
- Actualice el SDK o la versión del compilador de .NET para que coincidan con los requisitos del analizador o use una versión anterior del paquete del analizador compatible con el compilador actual (CS9057). Este error se produce cuando un ensamblado del analizador tiene como destino una versión más reciente de la API de Roslyn que proporciona el compilador en ejecución.
- Quite las referencias de analizador duplicadas del proyecto (CS9067). Compruebe el archivo del proyecto para ver si hay elementos repetidos
<Analyzer>o<PackageReference>que incluyan el mismo ensamblado del analizador a través de diferentes rutas de acceso. Las dependencias de paquetes transitivas también pueden provocar duplicados. - Compruebe que el ensamblado del analizador es un ensamblado de .NET válido y no está dañado (CS8034). Si el ensamblado no se puede cargar en absoluto, asegúrese de que el archivo existe en la ruta de acceso a la que se hace referencia y se creó para una plataforma de destino compatible. Recompile o vuelva a instalar el paquete NuGet para obtener una copia nueva.
- Asegúrese de que el tipo de analizador tiene un constructor público sin parámetros (CS8032). El compilador crea instancias de analizadores mediante una llamada a su constructor predeterminado. Si el constructor produce una excepción o requiere parámetros, no se puede crear el analizador.
- Compruebe que el ensamblado al que se hace referencia exporta realmente tipos de analizador o de generador de código fuente (CS8033). Un ensamblado al que se hace referencia como analizador debe contener tipos que implementan
DiagnosticAnalyzeroISourceGenerator/IIncrementalGenerator. Si el ensamblado es una dependencia en tiempo de ejecución en lugar de un analizador, haga referencia a él como una referencia de paquete o proyecto normal en su lugar. - Resuelva los problemas de carga de tipos en el ensamblado del analizador asegurándose de que todas sus dependencias están disponibles (CS8040). Un
ReflectionTypeLoadExceptionsuele significar que el ensamblado hace referencia a tipos de otros ensamblados que no se pueden encontrar. Asegúrese de que todas las dependencias necesarias se incluyen en el paquete NuGet del analizador. - Asegúrese de que los archivos de configuración del analizador (
.editorconfigo.globalconfig) son únicos por directorio (CS8700). El compilador no permite varios archivos de configuración del analizador en el mismo directorio porque las reglas de precedencia serían ambiguas. Combine los archivos o quite el duplicado. - Actualice el analizador o el generador de origen para que tenga como destino .NET Standard o .NET moderno en lugar de .NET Framework (CS8850). Los ensamblados que hacen referencia a .NET Framework no se admiten en la cadena de herramientas del compilador de .NET moderna. Si mantiene el analizador, vuelva a dirigirlo a
netstandard2.0. Si es un paquete de terceros, actualice a una versión que sea compatible con versiones modernas de .NET.
Los interceptores son experimentales
-
CS9137: La característica "interceptores" no está habilitada en este espacio de nombres. Agregue
<Features>InterceptorsPreview</Features>al proyecto.
Para usar interceptores, agregue el <Features>InterceptorsPreview</Features> elemento al archivo del proyecto dentro de una <PropertyGroup> sección (CS9137). Los interceptores son una característica experimental y no están habilitadas de forma predeterminada. Esta participación explícita es necesaria porque la característica interceptores está sujeta a cambios importantes o eliminación en futuras versiones. El compilador necesita confirmación de que comprende los riesgos antes de permitir su uso. Para obtener más información sobre los interceptores y sus funcionalidades, consulte Interceptores en la documentación de características de C# 12.
Error de coincidencia de firmas
Los errores y advertencias siguientes indican un error de coincidencia entre el método interceptor y el método interceptable.
-
CS9144: no se puede interceptar el método
Mcon interceptorVporque las firmas no coinciden. -
CS9148:
this -
CS9149: Interceptor no debe tener un
thisparámetro porque el método no tiene unthisparámetro . -
CS9155: no se puede interceptar la llamada con
Mporque no es accesible enV. -
CS9156: No se puede interceptar la llamada a
MconVdebido a una diferencia en los modificadores "con ámbito" o los atributos[UnscopedRef]. - CS9177: el método 'method' debe ser no genérico o tener aridad 'arity' para que coincida con 'target'.
- CS9178: el método 'method' debe ser no genérico para que coincida con 'target'.
Además, los siguientes avisos indican una discrepancia en las firmas del interceptor y del método interceptable.
-
CS9154: Interceptar una llamada a
Mcon interceptorV, pero las firmas no coinciden. - CS9158: La nulabilidad de los tipos de referencia en el tipo de retorno no coincide con el método interceptable.
- CS9159: la nulabilidad de los tipos de referencia en el tipo de parámetro no coincide con el método interceptable.
-
CS9270: no se admite '
InterceptsLocationAttribute(string, int, int)'. Vaya a la generación basada en "InterceptableLocation" de estos atributos en su lugar. (https://github.com/dotnet/roslyn/issues/72133)
Para corregir estos problemas, asegúrese de que el método interceptor coincide con los requisitos de firma y acceso del método interceptable:
- Asegúrese de que la firma del método interceptor coincide exactamente con el método interceptable (CS9144, CS9154). Los tipos de parámetros, modificadores, orden y tipo de valor devuelto deben ser idénticos. Revise las declaraciones de método y alinee sus signaturas.
- Agregue un
thisparámetro al interceptor cuando el método interceptable sea un método de instancia (CS9148) o quite elthisparámetro cuando el método interceptable sea estático (CS9149). Los interceptores de instancia requieren unthisparámetro del tipo declarante, mientras que los interceptores estáticos no deben tener uno. - Declare el interceptor en una ubicación donde el método interceptable sea accesible (CS9155). Si el método interceptable es
internal, el interceptor debe estar en el mismo ensamblado. Si esprivate, el interceptor debe estar en el mismo tipo o en un tipo anidado. - Haz coincidir los modificadores
scopedy los atributos[UnscopedRef]en los parámetrosrefcorrespondientes (CS9156). Cadarefparámetro del interceptor debe tener las mismas anotaciones de duración que el parámetro correspondiente en el método interceptable para garantizar la seguridad de la memoria. - Asegúrese de que ambos métodos tienen aridad genérica coincidente (CS9177, CS9178). Si el método interceptable no es genérico, el interceptor también debe ser no genérico. Si el método interceptable tiene parámetros de tipo, el interceptor debe tener el mismo número de parámetros de tipo con restricciones compatibles.
- Ajusta las anotaciones de nulabilidad en el tipo de valor devuelto (CS9158) y en los tipos de parámetro (CS9159). Habilite los tipos de referencia anulables en su proyecto y asegúrese de que las anotaciones de anulabilidad del interceptador coincidan exactamente con el método interceptable para mantener la seguridad de tipos.
- Utiliza el generador basado en la versión actualizada de
InterceptableLocationparaInterceptsLocationAttribute, en lugar del constructor obsoleto(string, int, int)(CS9270). El formato más reciente proporciona una mejor compatibilidad con las herramientas y la validación en tiempo de compilación. Consulte el problema de GitHub para obtener instrucciones de migración.
Asignación incorrecta
Los interceptores requieren un mapeo de origen que relacione el método interceptable y el método interceptor. Los errores siguientes indican un problema con la asignación:
- CS9139: No se puede interceptar: la compilación no contiene un archivo con ruta de acceso.
- CS9140: No se puede interceptar: la compilación no contiene un archivo con la ruta de acceso "path". ¿Quieres usar la ruta de acceso 'candidatePath'?
- CS9141: el número de línea y carácter proporcionados no hace referencia a un nombre de método interceptable, sino al token "token".
-
CS9142: el archivo especificado tiene
nlíneas, que es menor que el númeromde línea proporcionado. -
CS9143: La línea especificada tiene una longitud de
ccaracteres, que es menor que el número de caracteres proporcionadosn. - CS9145: No se puede interceptar: la ruta de acceso no está asignada. Se esperaba una ruta de acceso asignada.
- CS9147: el número de línea y carácter proporcionados no hace referencia al inicio del token "token". ¿Quieres usar la línea 'n' y el carácter 'c'?
-
CS9150: Interceptor no puede tener una
nullruta de acceso de archivo. -
CS9157: los números de línea y caracteres proporcionados para
InterceptsLocationAttributedeben ser positivos.
Para corregir los errores de mapeo, asegúrese de que su InterceptsLocationAttribute contenga rutas de acceso de archivo válidas e información de posición precisa.
- Compruebe que la ruta de acceso del archivo coincide exactamente con un archivo de la compilación (CS9139, CS9140). Utiliza la ruta exacta tal como aparece en tu proyecto, incluidos los separadores de directorio y respetando el uso correcto de mayúsculas y minúsculas. Si el compilador sugiere una ruta de acceso alternativa, actualice el atributo para usar esa ruta de acceso.
- Use rutas de archivos asignadas al trabajar con generadores de código fuente que transforman rutas de archivos (CS9145). Los generadores de origen suelen reasignar las rutas de acceso para los archivos generados y debe usar la ruta de acceso asignada que el compilador reconoce, no la ruta de acceso de origen original.
- Asegúrese de que la ruta del archivo no esté en
null(InterceptsLocationAttribute). Cada interceptación debe especificar una ruta de acceso de archivo válida que no sea NULL que identifique el archivo de origen que contiene la llamada a interceptación. - Proporcione números de líneas y caracteres positivos basados en 1 (CS9157). Los números de línea y las posiciones de caracteres deben comenzar en 1, no en 0. Compruebe que el generador de origen usa la indexación basada en 1 al calcular posiciones.
- Señale el inicio exacto del token del nombre del método (CS9141, CS9147). Los números de línea y carácter deben identificar el primer carácter del nombre del método en la invocación, no espacios en blanco, operadores u otros tokens. Si el compilador sugiere coordenadas alternativas, úselos para establecer como destino el inicio correcto del token.
- Permanezca dentro de los límites del archivo (CS9142, CS9143). Compruebe que el número de línea no supera el recuento total de líneas y el número de caracteres no supera la longitud de línea. Vuelva a calcular las posiciones si el archivo de origen ha cambiado desde que se generó el atributo.
Declaración incorrecta del interceptor
Los errores siguientes indican problemas con las declaraciones del interceptor, incluidos los problemas con el InterceptsLocationAttribute formato o las infracciones de las reglas del interceptor:
- CS9138: el método 'method' no se puede usar como interceptor porque su tipo contenedor tiene parámetros de tipo.
- CS9146: un método interceptor debe ser un método miembro normal.
-
CS9151: No se puede interceptar el posible nombre del método
Mporque no se está invocando. - CS9152: no se puede interceptar una llamada en el archivo con la ruta de acceso "path" porque varios archivos de la compilación tienen esta ruta de acceso.
- CS9153: la llamada indicada se intercepta varias veces.
- CS9160: no se puede interceptar un operador nameof.
-
CS9161: no se puede marcar un interceptor con
UnmanagedCallersOnlyAttribute. - CS9206: no se puede declarar un interceptor en el espacio de nombres global.
- CS9207: No se puede interceptar 'method' porque no es una invocación de un método miembro ordinario.
- CS9231: el argumento de datos de InterceptsLocationAttribute no tiene el formato correcto.
- CS9232: No se soporta la versión "version" del formato de interceptores. La última versión soportada es "1".
- CS9233: no se puede interceptar una llamada en el archivo "file" porque está duplicada en otro lugar de la compilación.
- CS9234: no se puede interceptar una llamada en el archivo 'file' porque no se encontró un archivo coincidente en la compilación.
- CS9235: el argumento de datos de InterceptsLocationAttribute hace referencia a una posición no válida en el archivo 'file'.
Para corregir los errores de declaración del interceptor, siga estas reglas para las declaraciones válidas del interceptor y el uso válido de InterceptsLocationAttribute.
- Dé formato al
InterceptsLocationAttributeargumento de datos correctamente (CS9231). El atributo requiere datos estructurados específicamente que codifican la ruta de acceso del archivo y la información de posición. Asegúrese de que el generador de origen genera datos en el formato esperado que coincida con la especificación de interceptores actuales. - Use la versión "1" en
InterceptsLocationAttribute(CS9232), ya que es la versión compatible más reciente. Actualice su generador de origen para que produzca atributos de formato de la versión 1 en lugar de usar números de versión no admitidos. - Asegúrese de que las rutas de acceso de archivo sean únicas en su compilación (CS9233, CS9234). Cuando la compilación contiene rutas de acceso de archivo duplicadas, cambie el nombre o reorganice los archivos para que cada ruta de acceso sea única. Compruebe que la ruta de acceso del archivo especificada en el atributo coincide realmente con un archivo incluido en la compilación.
- Valide los puntos de datos de posición en ubicaciones de código válidas (CS9235). Los números de línea y carácter deben hacer referencia a un punto de interceptación válido dentro del archivo especificado. Vuelva a generar el atributo si el archivo de origen ha cambiado o si la posición está fuera de los límites del archivo.
- Declare métodos de interceptor no genéricos en tipos no genéricos (CS9138). Los interceptores no se pueden declarar en tipos que tienen parámetros de tipo. Si necesita interceptar un método genérico, cree un interceptor no genérico en un tipo contenedor no genérico que funcione con el tipo construido específico.
- Haga que los interceptores sean métodos de miembro ordinario (CS9146). Los interceptores no pueden ser operadores, constructores, finalizadores, propiedades o indexadores. Declara tu interceptor como un método estático o de instancia normal.
- Intercepte invocaciones de método reales, no expresiones (CS9151, CS9207). Solo puede interceptar llamadas a métodos miembros normales que están siendo invocados. No se pueden interceptar grupos de métodos, delegados ni métodos a los que se hace referencia sin ser llamados. Asegúrese de que la ubicación interceptable identifica una llamada de método real.
- Quite los intentos de interceptación duplicados (CS9153). Cada llamada de método solo se puede interceptar una vez. Si varias instancias
InterceptsLocationAttributeapuntan a la misma llamada, quite todas excepto una para resolver la ambigüedad. - No interfiera con
nameofoperadores (CS9160). Elnameofoperador no invoca métodos en tiempo de ejecución, por lo que no se puede interceptar. Intercepte solo las llamadas de método reales que se ejecutan en tiempo de ejecución. - Eliminar
UnmanagedCallersOnlyAttributede interceptores (CS9161). Los interceptores deben llamarse desde código administrado y no se pueden marcar conUnmanagedCallersOnlyAttribute. Quite el atributo de la declaración del método interceptor. - Declarar interceptores dentro de un espacio de nombres (CS9206). Los interceptores no se pueden declarar en el espacio de nombres global y deben estar contenidos en al menos una declaración de espacio de nombres. Encapsula la clase "interceptor" en un espacio de nombres.
- Resuelva las rutas de acceso de archivo duplicadas en el nivel de compilación (CS9152). Cuando varios archivos comparten la misma ruta de acceso en la compilación, el compilador no puede determinar qué archivo se va a interceptar. Asegúrese de que la configuración de compilación genera rutas de acceso de archivo únicas o usa una estrategia de organización diferente para los archivos de origen.