Analyse von C# - code (als string) und zusätzliche Methoden einfügen

Habe ich eine C# - app an der ich arbeite, lädt es den code aus der Ferne, und dann läuft es (aus Gründen der Argumentation, können Sie davon ausgehen, das app ist sicher).

Der code ist C#, aber es ist geschickt, als XML-Dokument analysiert wird als ein string, und dann kompiliert und ausgeführt.

Nun, was ich tun möchte - und bin mit ein bisschen mehr Mühe, als ich erwartet hatte - ist in der Lage zu analysieren, das gesamte Dokument, und vor dem kompilieren, fügen Sie zusätzliche Befehle nach jeder line Ausführung.

Betrachten Sie beispielsweise den code:

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

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

            Log(i);
        }
    }
}

Was ich möchte, nach dem Parsen ist etwas mehr wie:

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

Beachten Sie die offensichtliche Fallstricke - ich kann nicht nur haben Sie nach jedem Semikolon, weil das nicht funktionieren würde, in einem getter/setter, d.h.:

Umwandeln:

public string MyString { get; set; }

Zu:

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

scheitern würden. Wie würde die Klasse-level-Deklarationen, Anweisungen, etc. Auch gibt es eine Reihe von Fällen, in denen konnte ich auch in MyAdditionalMethod() nach geschweiften Klammern, wie in der Delegierten unmittelbar nach der if-Anweisungen, oder der Methode, Erklärungen, etc.

So, was ich gesucht habe in CodeDOM, und dieses sieht wie es könnte eine Lösung sein, aber es ist hart, um herauszufinden, wo zu beginnen. Ich bin sonst versuchen zu analysieren, die ganze Sache, und erstellen Sie eine Struktur, die ich analysieren kann durch - aber das ist ein wenig schwierig sein, unter Berücksichtigung der Anzahl der Fälle, die ich beachten muss.

Kennt jemand andere Lösungen, die es gibt?

  • "Der code ist C#, aber es ist geschickt, als XML-Dokument analysiert, wie eine Zeichenfolge" -- abgesehen, wie komisch das alles klingt, können wir ein Beispiel der XML? Vielleicht können Sie injizieren Ihre Methoden, bevor es analysiert in einem string.
  • Ich keine Kontrolle über die XML-Dokument, so kann ich nicht Spritzen etwas, bis es ankommt und ausgewertet. Die XML beinhaltet nur den code als text ein element - ie. <Code>using System.IO; namespace MyApp { public class myClass {... </Code>
InformationsquelleAutor AlishahNovin | 2011-02-14
Schreibe einen Kommentar