it-swarm-es.com

Analizador para C #

¿Qué analizadores están disponibles para analizar el código C #?

Estoy buscando un analizador de C # que pueda usarse en C # y me dé acceso a información de línea y archivo sobre cada artefacto del código analizado.

99
Julien Hoarau

Funciona en código fuente:

Trabajos en Asamblea:

El problema con el "análisis" de ensamblaje es que tenemos menos información sobre la línea y el archivo (la información se basa en el archivo .pdb, y Pdb contiene información de líneas solo para los métodos)

Personalmente recomiendo Mono.Cecil y NRefactory .

116
Julien Hoarau

Mono (fuente abierta) incluye compilador C # (y por supuesto, analizador)

7
aku

Si va a compilar C # v3.5 para ensamblados .net:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });

http://msdn.Microsoft.com/en-us/library/Microsoft.csharp.csharpcodeprovider.aspx

6
zproxy

Si está familiarizado con ANTLR, puede usar Antlr C # grammar .

5
prosseek

He implementado justo lo que está preguntando (AST Parsing of C # code) en OWASP O2 Platform project usando SharpDevelop AST API.

Para facilitar el consumo, escribí una API rápida que expone una serie de elementos clave del código fuente (utilizando declaraciones, tipos, métodos, propiedades, campos, comentarios) y puede volver a escribir el código C # original en C # y en VBNET. .

Puede ver esta API en acción en este archivo de script O2 XRule: ascx_View_SourceCode_AST.cs.o2 .

Por ejemplo, esta es la forma en que procesa un texto de código fuente de C # y rellena una serie de TreeViews y TextBoxes:

    public void updateView(string sourceCode)
    {   
        var ast = new Ast_CSharp(sourceCode);
        ast_TreeView.show_Ast(ast);
        types_TreeView.show_List(ast.astDetails.Types, "Text");
        usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
        methods_TreeView.show_List(ast.astDetails.Methods,"Text");
        fields_TreeView.show_List(ast.astDetails.Fields,"Text");
        properties_TreeView.show_List(ast.astDetails.Properties,"Text");
        comments_TreeView.show_List(ast.astDetails.Comments,"Text");

        rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
        rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");                                
    }

El ejemplo en ascx_View_SourceCode_AST.cs.o2 también muestra cómo puede usar la información recopilada de AST para seleccionar en el código fuente un tipo, método, comentario, etc.

Para referencia, aquí está el código de la API que escribió (tenga en cuenta que esta es mi primera pasada al usar el analizador C # AST de SharpDevelop, y todavía me estoy preguntando cómo funciona):

4
Dinis Cruz

Recientemente hemos lanzado un analizador de C # que maneja todas las características de C # 4.0 más la nueva característica asíncrona: Analizador de C # y CodeDOM

Esta biblioteca genera un modelo de objeto semántico que conserva los comentarios y la información de formato y se puede modificar y guardar. También admite el uso de consultas LINQ para analizar el código fuente.

3
Ken Beckett
2
Galwegian

SharpDevelop , un IDE de código abierto, viene con un analizador de código basado en visitantes que funciona realmente bien. Puede ser utilizado independientemente del IDE.

2
Akselsson

Considere utilizar la reflexión en un binario construido en lugar de analizar el código C # directamente. ¿La API de reflexión es realmente fácil de usar y quizás pueda obtener toda la información que necesita?

2
Hallgrim

Tal vez podrías probar con Irony en irony.codeplex.com.

Es muy rápido y ya existe una gramática c #.

La gramática en sí está escrita directamente en c # de forma similar a BNF (se logra con algunas sobrecargas de operadores)

Lo mejor de todo es que la "gramática" produce el AST directamente.

2
SeeSoft

Echa un vistazo a Analizador de Oro . Tiene una IU muy intuitiva que le permite probar interactivamente su gramática y generar código C #. Hay muchos ejemplos disponibles y es completamente gratis.

2
sbeskur

Definitivamente debería revisar a Roslyn ya que MS acaba de abrir (o pronto abrirá) el código con una licencia de Apache 2 aquí . También puede consultar una forma de analizar esta información con este código de GitHub .

2
Jason

Algo que está ganando impulso y muy apropiado para el trabajo es Nemerle

puedes ver cómo podría resolverlo en estos videos de NDC:

1
Stéphane

No en C #, pero hay disponible un analizador completo de C # 2/3/4 que genera AST completos con nuestro DMS Software Reengineering Toolkit .

DMS proporciona una amplia infraestructura para el análisis, la creación de árboles, la construcción de tablas de símbolos y análisis de flujo, la transformación de fuente a fuente y la regeneración de código fuente a partir de los AST (modificados). (También maneja muchos otros idiomas además de C #).

EDITAR (septiembre) 2013: Esta respuesta no se ha actualizado recientemente. DMS siempre ha manejado C # 5.0

1
Ira Baxter