2009-10-03 16 views

Respuesta

6

No es directamente posible hacer esto con el marco básico .NET. Es necesario utilizar un tercero o herramientas adicionales, por ejemplo:

+0

¿Pero por qué? ¿El compilador C# no usa CodeDOM? – ulrichb

+4

No, no es así. CodeDom es para desarrolladores de aplicaciones administradas; csc.exe es un código no administrado que no tiene dependencias .NET. – bobbymcr

0

Trate Mono.Cecil

+1

Pero no trata con el código fuente. O lo hace? –

+0

Correcto, trata solo con IL. Puede usar NRefactory (que es un analizador sintáctico para C# y VB.NET, también del proyecto #Develop). –

0

Si desea que la capacidad de analizar y llevar a cabo análisis y transformaciones arbitrarios en el código fuente de C# (o en una variedad de otros idiomas), revisa nuestro The DMS Software Reengineering Toolkit.

DMS tiene un extremo frontal completo de C#, construye árboles de sintaxis abstractos completos para el código analizado (pero no es un CodeDom), proporciona una API de procedimiento completa para caminar/verificar/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 donde intenta preservar el espaciado original, o en el modo de impresión bonita, donde aplica un estilo de impresión bonita que puede controlar por completo. Los comentarios se conservan en la fuente regenerada correctamente.

Además, DMS proporciona coincidencia y transformación de patrones a nivel de fuente (por ejemplo, puede escribir "x = x + 1 ==> x ++" en lugar de codificar todo el árbol para verificar, hackear árbol para cambiar.) Ver writeup on program transformations para entender por qué esto es mucho menos trabajo ...

5

Esta es una pregunta muy antigua, pero vale la pena señalar que la respuesta aceptada ya no se aplica. El reciente proyecto Roslyn de Microsoft está explícitamente dirigido a exponer todo el conocimiento que el compilador obtiene sobre su base de código en el proceso de analizarlo estáticamente y exponer toda esta información a través de API administradas para que pueda aprovechar. Está disponible para VB y C#.

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

Cuestiones relacionadas