¿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
Respuesta
Este es definitivamente un escenario en el que estamos pensando. Hoy hay un par de problemas que lo hacen un poco difícil:
- No se pueden usar las API de área de trabajo para cargar un proyecto/solución porque ya está dentro de msbuild.
- 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.
Gracias, Kevin ¡Esperamos con ansias las nuevas características de Roslyn de su equipo! –
sé que esto es de 2012. ¿hay alguna noticia al respecto? ¿hay una manera fácil ahora? – riki
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".
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.
- 1. ¿Puedo usar Roslyn para la reescritura del código de tiempo de compilación?
- 2. Modificación del código fuente de un paquete de elaboración casera
- 3. ¿Roslyn es la herramienta adecuada para una comprobación de expresiones en tiempo de compilación?
- 4. Obtener tiempo de compilación JAR
- 5. Modificación del proceso de compilación con SPEC para usar LLVM
- 6. Transformación de código Java en tiempo de compilación
- 7. Generando código en tiempo de compilación utilizando scripts
- 8. Ordene y elimine (sin usar) usando sentencias del script/código de Roslyn?
- 9. Tiempo de modificación del archivo (segundos) en Unix
- 10. Tiempo de compilación y ejecución de código fuente C++ vs C
- 11. Nodo VisitClassDeclaration.Identifier en Roslyn
- 12. Microsoft Roslyn vs CodeDom
- 13. Creando un EF CodeFirst DbContext usando Roslyn
- 14. Generación de código de tiempo de compilación en D
- 15. biblioteca de compilación de ndk fuera del árbol de código fuente del proyecto principal
- 16. Cómo inyectar código C# en tiempo de compilación?
- 17. Creación en tiempo de ejecución del código fuente del diseñador de formulario de Visual Studio
- 18. Preprocesamiento del código fuente como parte de una compilación de maven
- 19. Compilación de fuente a fuente con LLVM
- 20. Compilación de un AST de nuevo al código fuente
- 21. Formato extensible en Roslyn?
- 22. Extraiga los atributos del código fuente de C# sin Reflection
- 23. mismo código de modificación [C++]
- 24. Cómo cifrar la salida del código fuente HTML usando PHP
- 25. Obtener el nombre de archivo del código fuente de un tipo en depuración compilación
- 26. Tiempo de compilación del sistema operativo
- 27. Código nativo de modificación automática en Android
- 28. formateando el código en el tiempo de compilación
- 29. errores de compilación en tiempo y código inalcanzable
- 30. ¿Compilación o complicación del código .NET?
Buena pregunta, he estado pensando en este tipo de cosas recientemente. –