Pregunta

requiero la capacidad de procesar previamente una serie de archivos de C # como un paso prebuild para un proyecto, detectar el inicio de métodos, e inserte el código generado en el inicio del método, antes de cualquier código existente. Estoy, sin embargo, teniendo un problema de detección de la apertura de un método. Al principio me probé una expresión regular para coincidir, pero terminó con demasiados falsos positivos.

Me gustaría utilizar la reflexión, pero la clase MethodInfo no hace referencia al punto de la fuente original.

Editar : Lo que estoy tratando de hacer aquí es apoyar precondiciones en métodos, que el código de condición previa determinada por los atributos en el método. Mi idea inicial es que pude buscar el principio del método, y luego insertar código generado para el manejo de las condiciones previas.

¿Hay una mejor manera de hacer esto? Estoy abierto a la creación de un complemento de Visual Studio si es necesario.

Este es un proyecto .NET 2.0.

Saludos

¿Fue útil?

Solución

Mono.Cecil le permitirá hacer esto limpiamente alterando el código generado, sin entrar en escribir un analizador # C que es poco probable que sea negocio principal para usted. ..

no he hecho nada importante con PostSharp pero estaría adivinando su más apropiada que Mono para implementar algo así como condiciones previas o AOP. Alternativamente, usted podría ser capaz de hacer algo AOPy con un contenedor DI como Ninject

Pero, por supuesto, la aplicabilidad de esta idea Depende - que no dijo mucho aparte de que se desea introducir el código en el inicio de métodos ...

EDIT: A la luz de su deseo de hacer precondiciones ... Code Contracts en .NET 4 está definitivamente en esa dirección.

¿Qué tipo de herramienta tiene usted? ¿Cuál es incorrecto con tener un solo archivo DLL Mono.Cecil.dll enviado? De cualquier manera algo más que un programa de análisis es la herramienta para el trabajo.

Otros consejos

Estoy seguro de que hay una manera más fácil, pero esto podría ser una buena excusa para tomar MGrammer para dar una vuelta.

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