Анализ кода C # (в виде строки) и вставка дополнительных методов

У меня есть приложение C #, над которым я работаю, которое загружает его удаленно, а затем запускает его (в качестве аргумента вы можете предположим, что приложение защищено).

Код - C #, но он отправляется в виде XML-документа, разбирается как строка, а затем компилируется и выполняется.

Теперь, что я хотел бы сделать - и у меня немного больше трудностей, чем я ожидал - я могу проанализировать весь документ и перед компиляцией вставлять дополнительные команды после выполнения каждой строки.

Например, рассмотрим код:

using System;
using System.Collections.Generic;
using System.Linq;

namespace MyCode
{
    static class MyProg
    {
        static void Run()
        {
            int i = 0;
            i++;

            Log(i);
        }
    }
}

Что бы я хотел, после синтаксического анализа это что-то вроде:

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();
        }
    }
}

Имейте в виду очевидные подводные камни - я не могу использовать его только после каждой точки с запятой, потому что это не будет работать в геттере / сеттере, например:

Преобразование:

public string MyString { get; set; }

To:

public string MyString { get; MyAdditionalMethod(); set; MyAdditionalMethod(); }

не удастся. Как и объявления уровня класса, операторы using и т. Д. Кроме того, есть ряд случаев, когда я мог бы добавить в MyAdditionalMethod () после фигурных скобок - например, в делегатах, сразу после операторов if или объявлений методов и т.д.

Итак, то, что я изучал в CodeDOM, и похоже, что это могло бы быть решением, но трудно понять, с чего начать. В противном случае я пытаюсь разобрать все и создать дерево, которое я могу проанализировать - хотя это немного сложно, учитывая количество случаев, которые мне нужно рассмотреть.

Кто-нибудь знает какие-либо другие решения, которые существуют?

11
задан AlishahNovin 14 February 2011 в 23:39
поделиться