es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generador de código fuente de C# dependiente de una clase existente.

Necesito generar código fuente que herede de una clase abstracta que ya tengo presente en mi proyecto, y el proyecto generador de código fuente en sí mismo se compila. Pero cuando el compilador se queja de que el código fuente generado no reconoce la clase abstracta, aunque está en el mismo proyecto. ¿Necesito decirle al proyecto generador que tenga dependencias en tiempo de ejecución con sí mismo de alguna manera?

EDITAR:
Estoy usando Microsoft.CodeAnalysis.CSharp. Aquí está el código que describe la situación:
https://github.com/alebo611/csharpsourcegenproblem/tree/main/MyGeneratorProject

Es decir, solo quiero generar una subclase del “Vehículo” ya definido. Si lo ejecuta en Visual Studio, obtendrá el siguiente error:

Error CS0246 El nombre del tipo o espacio de nombres ‘Vehicle’ no se pudo encontrar (¿falta una directiva using o una referencia de ensamblado?) Consumidor generado.cs

Y agregar “Using ApplicationContext” no ayuda, se quejará de que no encuentra el contexto.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con la accesibilidad de la clase abstracta “Vehicle” dentro del proyecto generador de código fuente.

    Para generar código que herede de una clase abstracta, el proyecto generador de código fuente debe tener visibilidad de la clase abstracta. Si la clase abstracta está presente en el mismo proyecto, entonces debe ser accesible sin dependencias adicionales.

    Sin embargo, si el proyecto generador no reconoce la clase abstracta, puede ser un problema de referencia o visibilidad. Una forma de asegurarse de que el proyecto generador tenga visibilidad de la clase abstracta es agregar una referencia al proyecto que contiene la clase abstracta.

    Para agregar una referencia al proyecto que contiene la clase abstracta en el proyecto generador, siga estos pasos:
    1. Haga clic derecho en el proyecto generador en el Explorador de soluciones.
    2. Seleccione “Agregar” > “Referencia”.
    3. En la ventana “Administrador de referencias”, seleccione la pestaña “Proyectos”.
    4. Seleccione el proyecto que contiene la clase abstracta y haga clic en “Agregar”.
    5. Compile la solución e intente generar el código nuevamente.

    Si el proyecto generador aún no reconoce la clase abstracta, es posible que desee verificar los modificadores de acceso de la clase abstracta y sus miembros. Asegúrese de que estén configurados en “público” si desea que sean accesibles por otros proyectos en la solución.

    Además, asegúrese de que el espacio de nombres de la clase abstracta y el código generado sean iguales.

    Con la referencia agregada, el proyecto generador debería poder reconocer la clase abstracta y generar código que hereda de ella.

Comments are closed.