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 generan cuando se cargan generadores o interceptores de origen durante una compilación:
-
CS9137: La característica experimental "interceptores" no está habilitada. Agregue
<Features>InterceptorsPreview</Features>al proyecto. - CS9138: El método no se puede utilizar como interceptor porque él o su tipo contenedor tienen 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 ruta de acceso. ¿Quieres usar otra ruta de acceso?
- CS9141: el número de línea y carácter proporcionados no hace referencia a un nombre de método interceptable, sino a un 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 de un token. ¿Querías usar líneas
ny caracteresc? -
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 esta ruta de acceso 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 interceptor debe ser no genérico o tener aridad coincidente.
- CS9178: el método debe ser no genérico para que coincida
- CS9206: no se puede declarar un interceptor en el espacio de nombres global.
- CS9207: no se puede interceptar porque el método no es una invocación de un método miembro normal.
- 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 generan cuando los generadores o interceptores de origen se cargan durante una compilación:
-
CS8784: El generador "
YourSourceGeneratorName" no se pudo inicializar. No contribuirá a la salida, y pueden producirse errores de compilación como resultado. -
CS8785: El generador '
YourSourceGeneratorName' no pudo generar el código fuente. No contribuirá a la salida y, como resultado, pueden producirse errores de compilación. - CS9057: no se puede usar el ensamblado del analizador porque hace referencia a una versión más reciente del compilador que la versión que se está ejecutando actualmente.
- CS9067: referencia del analizador especificada 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:
Los interceptores son experimentales
-
CS9137: La característica experimental "interceptores" no está habilitada. 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), ya que los interceptores son una característica experimental que no está habilitada 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, y 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 interceptor debe ser no genérico o tener aridad equivalente.
- CS9178: el método debe ser no genérico para que coincida
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 ruta de acceso. ¿Quieres usar otra ruta de acceso?
- CS9141: el número de línea y carácter proporcionados no hace referencia a un nombre de método interceptable, sino a un 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 de un token. ¿Querías usar líneas
ny caracteresc? -
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 no se puede usar como interceptor porque él mismo o su tipo contenedor tienen 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 esta ruta de acceso 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 porque el método no es una invocación de un método miembro normal.
- 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 pueden tener parámetros de tipo en el propio método o en su tipo contenedor. Si necesita interceptar un método genérico, cree un interceptor 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 en 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.
Compatibilidad del analizador
Las advertencias siguientes indican problemas con los ensamblados del analizador o del generador de origen:
- CS9057: no se puede usar el ensamblado del analizador porque hace referencia a una versión más reciente del compilador que la versión que se está ejecutando actualmente.
- CS9067: referencia del analizador especificada varias veces.
Estas advertencias se producen cuando hay problemas de compatibilidad con los ensamblados del analizador:
- CS9057 se genera cuando un ensamblado del analizador hace referencia a una versión del compilador de Roslyn que es más reciente que la que se está ejecutando actualmente. Esto impide que el analizador se cargue porque puede depender de las API o los comportamientos que no están disponibles en la versión actual del compilador. Para resolverlo, actualice el compilador o el SDK para que coincida con los requisitos del analizador o use una versión del analizador compatible con la versión del compilador actual.
- CS9067 advierte cuando se hace referencia varias veces al mismo ensamblado del analizador en el proyecto. Esto suele ocurrir cuando se incluye un analizador a través de varias rutas de acceso o referencias de paquete. Aunque no es un error, las referencias duplicadas pueden afectar al rendimiento de la compilación y pueden provocar un comportamiento inesperado. Quite las referencias duplicadas para resolver esta advertencia.