Cómo analizar y modificar mediante programación de código C #
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?
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:
- Open Source C # Analizador: http://www.codeplex.com/csparser
- Gplex emparejado con un C # gramática : http://plas.fit.qut.edu.au/gplex/
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.
Trate Mono.Cecil
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.