Pregunta

Lo que quiero hacer es leer el código C #, analizarlo, insertar algunas llamadas a métodos y compilar finalmente.

¿Es posible convertir el código fuente C # (una lista de cadenas) a los objetos CodeDOM?

¿Fue útil?

Solución

No es directamente posible hacer esto con el Marco de núcleo .NET. Es necesario utilizar un tercero o herramientas adicionales, por ejemplo:

Otros consejos

Esta es una pregunta muy viejo, pero vale la pena señalar que la respuesta aceptada ya no se aplica. proyecto Roslyn está dirigido explícitamente a la exposición de todo el conocimiento de las ganancias del compilador acerca de su código base en el proceso de forma estática analizarla y exponer toda esta información a través de API administradas para que usted pueda aprovechar. Está disponible tanto para VB y C #.

Puesto que usted quiere consumir información de análisis estático, necesitará el Microsoft.CodeAnalysis NuGet paquete (las cosas que necesita para C # está en el espacio de nombres Microsoft.CodeAnalysis.CSharp) y algo de tiempo en el muestras y tutoriales la página en los documentos.

Trate LINQ sobre C # . Es maravilloso.

Si desea que la capacidad de analizar y llevar a cabo análisis arbitrarias y transformaciones en código fuente C # (o una variedad de otros idiomas), echa un vistazo a nuestra El software DMS Reingeniería Toolkit.

DMS tiene un extremo frontal completo de C #, construye árboles de sintaxis abstracta completas para el código analizada (pero no un CodeDOM), proporciona una API de procedimiento completo para caminar / comprobar / cambiar los AST. Después de revisar el árbol, DMS puede regenerar el código fuente correspondiente al árbol modificado, ya sea en el modo de fidelidad en los que trata de preservar el espacio original, o el modo prettyprint donde se aplica un estilo prettyprint que se puede controlar por completo. Comentarios son retenidos en la fuente regenerado correctamente.

Además, DMS proporciona la coincidencia de patrones en el origen y la transformación (por ejemplo, puede escribir "x = x + 1 ==> x ++" en lugar de codificar toda la vuelta a su alrededor de árboles a verificar, cortar el árbol para cambiar.) Ver valoración crítica sobre las transformaciones del programa para entender lo qué esto es una mucho menos trabajo ..

El CSharpCodeProvider podría ser lo que usted' re buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top