Tengo una aplicación C# en la que estoy trabajando que carga el código de forma remota y luego lo ejecuta (para mayor justificación, puede suponer que la aplicación es segura).Analizando el código C# (como cadena) e insertando métodos adicionales
El código es C#, pero se envía como un documento XML, se analiza como una cadena, y luego se compila y ejecuta.
Ahora, lo que me gustaría hacer, y estoy teniendo más dificultades de las que esperaba, es poder analizar todo el documento y, antes de compilar, insertar comandos adicionales después de cada ejecución de línea.
Por ejemplo, considere el código:
using System;
using System.Collections.Generic;
using System.Linq;
namespace MyCode
{
static class MyProg
{
static void Run()
{
int i = 0;
i++;
Log(i);
}
}
}
lo que me gustaría, después del análisis es algo más parecido a:
using System;
using System.Collections.Generic;
using System.Linq;
namespace MyCode
{
static class MyProg
{
static void Run()
{
int i = 0;
MyAdditionalMethod();
i++;
MyAdditionalMethod();
Log(i);
MyAdditionalMethod();
}
}
}
Tenga en cuenta las dificultades obvias - no puedo tenerlo después de cada semi-colon, porque esto no funcionaría en un getter/setter, es decir:
conversión:
public string MyString { get; set; }
Para:
public string MyString { get; MyAdditionalMethod(); set; MyAdditionalMethod(); }
fracasarían. Al igual que las declaraciones a nivel de clase, el uso de instrucciones, etc. Además, hay una serie de casos en los que también podría agregar en MyAdditionalMethod() después de llaves, como en delegados, inmediatamente después de sentencias if, declaraciones de métodos, etc.
Entonces, lo que he estado buscando en CodeDOM, y parece que podría ser una solución, pero es difícil saber por dónde empezar. De lo contrario, estoy tratando de analizar todo y crear un árbol que pueda analizar, aunque es un poco difícil, teniendo en cuenta la cantidad de casos que debo considerar.
¿Alguien sabe alguna otra solución que esté disponible?
"El código es C#, pero se envía como un documento XML, se analiza como una cadena" - Dejando a un lado cuán raro suena todo esto, ¿podemos ver una muestra del XML? Tal vez pueda inyectar sus métodos antes de analizarlos en una cadena. – mpen
No controlo el documento XML, por lo que no puedo inyectar nada hasta que llegue y se analice. El XML solo contiene el código como el texto interno de un elemento, es decir.
using System.IO; namespace MyApp { public class myClass {...
– AlishahNovin