Frage

Ich stieß auf eine kurze Diskussion, die vor kurzem auf einer anderen Website über C# runtime-Kompilierung vor kurzem bei der Suche nach etwas anderem und fand die Idee interessant.Haben Sie jemals diese verwendet?Ich bin versucht zu bestimmen, wie/Wann man das und welches problem es löst.Ich wäre sehr daran interessiert zu hören, wie Sie verwendet haben, oder in welchen Kontexten es Sinn macht.

Vielen Dank.

War es hilfreich?

Lösung

Normalerweise sehe ich das in Fällen verwendet, in denen Sie derzeit verwenden, Reflexion und Optimierung für die Leistung.

Zum Beispiel, statt der Reflexion zu nennen, die Methode X, generieren Sie eine Dynamische Methode zur Laufzeit zu tun diese für Sie.

Andere Tipps

Sie können dies verwenden, um ein Skript hinzuzufügen, Unterstützung für Ihre Anwendung.Für Beispiele sehen hier oder hier.

Es ist sehr leicht möglich, zu veröffentlichen Teile Ihrer internen Objekt-framework, um die scripting-Teil, so konnte man relativ einfach etwas hinzufügen, um Ihre Anwendung, die die gleiche Wirkung, wie zum Beispiel VBA für Office.

Ich habe gesehen, dass dies (Laufzeit compilation / Nutzung des Systems.Reflexion.Emittieren-Klassen), die in der Generierung von dynamischen proxies ( Beispiel-Code-Projekt ) oder anderen Mitteln zur Optimierung Reflexion Anrufe (Zeit-Weise).

In mindestens einem Fall könnten Sie es verwenden, wird beim generieren von dynamischen code.Zum Beispiel der Rahmen ist mit dieser intern zu generieren, XML-serialisierungsprogramme on-the-fly.Nach einem Blick in eine Klasse zur Laufzeit erzeugen kann, die den code zum serialisieren / Deserialisieren der Klasse.Es kompiliert dann den code ein und Anwender, wie gebraucht.In der gleichen Weise können Sie code generieren, zu verarbeiten beliebigen DB-Tabellen etc.und dann kompilieren und laden Sie die generierte assembly.

Gut, alle C# - code ausgeführt wird-Zeit kompiliert, da es einen JIT (just-in-time) - compiler.Ich nehme an, Sie beziehen sich auf Reflexion.Emittieren zu erstellen, Klassen etc.on-the-fly.Hier ist ein Beispiel, das ich gesehen habe vor kurzem in der Xml-Rpc.Net Bibliothek.

Ich erstelle eine C# - Schnittstelle, die die gleiche Signatur wie eine XML-RPC-service-Methode aufrufen, z.B.

IMyProxy : IXmlRpcProxy
{
    [XmlRpcMethod]
    int Add(int a, int b);
}

Dann in meinem code rufe ich so etwas wie

IMyProxy proxy = (IMyProxy)XmlRcpFactory.Create(typeof(IMyProxy));

Dies nutzt run-time code generation zu schaffen eine voll funktionsfähige proxy für mich, so kann ich es verwenden, wie diese:

int result = proxy.Add(1, 2);

Dieser übernimmt anschließend die XML-RPC-Aufruf für mich.Ziemlich cool.

Ich verwendet, runtime-compiler Dienstleistungen aus .NET in meiner Diplomarbeit.Im Grunde ging es um visuell zu kreieren einige grafische Komponente für die Prozessvisualisierung, die generierten C# - code in eine assembly kompiliert und kann dann verwendet werden, auf dem Ziel-system nicht interpretiert, schneller und kompakter.Und als bonus, werden die erzeugten Bilder können werden verpackt in die gleiche Montage als Ressourcen.

Die weitere Nutzung wurde in Java.Ich hatte eine Anwendung, die musste Grundstück eine potenziell kostspielige Funktion mit einigen numerischen Algorithmus (war Sie zurück an der Universität) kann der Benutzer die EINGABETASTE.Ich legte die eingegebenen Funktion in eine Klasse, kompiliert und geladen, und es wurde anschließend für die relativ schnelle Ausführung.

So, das sind meine zwei Erfahrungen, wo runtime code generation war eine gute Sache.

etwas, das ich es war, für die Möglichkeit, C# - und VB-code auf bu von dem Benutzer ausgeführt, ad-hoc.Geben Sie in einer Zeile des Codes (oder ein paar Zeilen) und es wäre kompiliert, geladen in einer app-Domäne, und ausgeführt, und dann entladen.Dies ist wahrscheinlich nicht das beste Beispiel, aber ein Beispiel dafür none-the-less

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top