Pregunta

Necesito analizar una simple declaración (esencialmente una cadena de llamadas de función en algún objeto) representa como una variable de cadena en un objeto CodeDom (probablemente una subclase de CodeStatement). También me gustaría ofrecer algunas importaciones de espacios de nombres por defecto para poder utilizar las declaraciones menos detallado.

He mirado alrededor de SO y el Internet para encontrar algunas sugerencias, pero estoy bastante confundido acerca de lo que es y no es posible y lo que es la forma más sencilla de hacerlo. Por ejemplo esta pregunta parece ser casi lo que quiero, por desgracia no puedo utilizar la solución como el CodeSnippetStatement no parece estar apoyada por el motor de ejecución que utilizo (WF el motor de reglas).

Cualquier sugerencia que me podrían ayudar a / me punto en la dirección correcta?

¿Fue útil?

Solución

No hay una biblioteca o función para analizar el código C # en objetos CodeDOM como parte de las bibliotecas de .NET estándar. Las bibliotecas han CodeDOM algunos métodos que parecen estar diseñados para esto, pero ninguno de ellos están efectivamente en práctica. Por lo que yo sé, hay alguna aplicación disponible en Visual Studio (utilizado por ejemplo por diseñadores), pero eso es sólo interno.

CodeSnippetStatement es un nodo CodeDOM que le permite colocar cualquier cadena en el código generado. Si desea crear el árbol CodeDOM sólo para generar código fuente C #, que esto es por lo general muy bien (el generador de código fuente sólo imprime la cadena a la salida). Si el motor de WF tiene que entender el código en la cadena (y no sólo generar código fuente y compilarlo), que CodeSnippetStatement no funcionará.

Sin embargo, existen herramientas de 3 ª parte que se pueden utilizar para analizar el código fuente C #. En un proyecto que trabajé, utilizamos NRefactory biblioteca (que se utiliza en SharpDevelop) y funcionó bastante bien. Se le da un árbol (AST) que representa el código analizado y me temo que tendrá que convertir esto en el árbol CodeDOM correspondiente a sí mismo.

Otros consejos

He encontrado una implementación de la biblioteca aquí que parece cubrir más o menos todo lo que necesito para mis propósitos. No sé si es lo suficientemente robusta como para ser utilizado en escenarios de negocios, pero para mis pruebas de unidad es más o menos todo lo que puedo pedir.

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