2012-04-26 13 views
19

¿Es posible modificar el código fuente antes de la compilación usando Roslyn dentro de la tarea MSBuild en el servidor CI? He logrado hacer lo que quiero en VS, pero me pregunto si es posible fuera de VS. Actualmente estoy viendo las API de Workspace y Compiler API y parecen ser la herramienta adecuada para lograrlo, pero todavía no estoy seguro de si es posible. En particular, me preocupa devolver los cambios que le he hecho a MSBuild para que pueda continuar su trabajo.Modificación del código fuente en tiempo de compilación usando Roslyn

+1

Buena pregunta, he estado pensando en este tipo de cosas recientemente. –

Respuesta

9

Este es definitivamente un escenario en el que estamos pensando. Hoy hay un par de problemas que lo hacen un poco difícil:

  1. No se pueden usar las API de área de trabajo para cargar un proyecto/solución porque ya está dentro de msbuild.
  2. Para usar las API regulares del compilador, necesita construir una compilación usted mismo, que puede ser un montón de trabajo.

En el futuro, nos gustaría proporcionar un "Crear un espacio de trabajo a partir de una cadena de línea de comandos csc/vbc", que haría esto mucho más fácil.

Eche un vistazo a Hooking into the compiler (csc.exe or vbc.exe) itself y Problem with using Roslyn in a MS Build Task para alguna discusión previa sobre esto.

+0

Gracias, Kevin ¡Esperamos con ansias las nuevas características de Roslyn de su equipo! –

+0

sé que esto es de 2012. ¿hay alguna noticia al respecto? ¿hay una manera fácil ahora? – riki

1

No he podido comprobar esto personalmente, (por lo que si lo desea, trate esta "respuesta" como un comentario), pero leyendo cosas sobre Roslyn, especialmente this entrada de blog, parece que debería ser possible (mirar para el párrafo "Reescribir"

Aparentemente, puede construir un árbol de sintaxis desde la fuente (no demasiado sorprendente para un compilador, supongo), luego modificar esto usando API, y finalmente escribirlo de nuevo en una cadena/archivo o lo que sea.

También vea MSDN sobre árboles de sintaxis de Roslyn conceptualmente, y esto walkthrough sobre "Transformación de sintaxis".

2

con respecto a la pregunta sobre Problem with using Roslyn in a MS Build Task,

public class MyTask : Task 

cambiar de tareas para AppDomainIsolatedTask es una solución rápida. No tengo una cuenta msdn, así que solo la publicaré aquí. Espero que pueda ayudar.

Cuestiones relacionadas