Laden...

Programm Code zur Laufzeit Comlilieren und Einbinden

Erstellt von tigersammy vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.171 Views
T
tigersammy Themenstarter:in
62 Beiträge seit 2006
vor 17 Jahren
Programm Code zur Laufzeit Comlilieren und Einbinden

Hallo

Hat einer von euch vielleicht eine Idee wie ich einen Sorcecode von einem Programm(PlugIN) zur laufzeit Compiliere und Dann in die Anwendung einbinde??

Das Problem schaut folgender massen aus: Ich will eine Anwendung erstellen die sich zur laufzeit mit einem Server Verbindet dorten den Aktuellen sorce Code holt diesen dann Comliliert(X86/x64) und dann in sich selbst ausfürt dies soll natürlich nicht bei jedem mal ausführen passieren also VersionsControlle soweit so gut das geht ja auch nur das mit dem Compilieren und Einbinden Hagt noch.

mfg
Stephan

Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.

1.271 Beiträge seit 2005
vor 17 Jahren

Das kompilieren wurde hier auch schon öfter durchgekaut. Z.B. C#-Codestring während der Laufzeit ausführen.
Ich finde das bei deiner Problemstellung aber den falschen Lösungsweg. Warum holst du dir von dem Server nicht eine kompilierte Version? Die ist auch um einiges kleiner, als der komplette SourceCode. Außerdem ist das kompilieren viel zu aufwendig.

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

347 Beiträge seit 2006
vor 17 Jahren

Code dynamisch zu generieren muss aber wirklich begründet sein.
Zum Beispiel ist der C# compiler nicht in der Lage reine DynamicAssemblies zu generieren. -> Du müllst dein Tempdir mit Assemblies zu.
Dyn. Code aus einer Hochsprache braucht auch ewig lange zum kompilieren.
Das größte Problem ist, dass du native Echsen/DLLs anfassen und lokale Zugriffe brauchst. -> Du brauchst FullTrust!

Dyn. Code macht da Sinn wo man mit statischem Kompilieren einfach nicht weiter kommt oder der Performancegewinn durch maßgeschneiderte Binaries alle Nachteile aufwiegt.
Mir würde es aber nicht im Traum einfallen C#, Chrome, [andere Hochsprache] dafür herzunehmen.
Wesentlich effizienter ist es sich ein statisch kompilierbares Gerüst zu zimmern und dann den nötigen IL Code zu generieren, der möglichst viel statisch kompilierten Code benutzt.

Dein Szenario scheint das überhaupt nicht nötig zu haben.
Wichtig für dich wäre es, die Interfaces die deine App und die PlugIns benutzen in Extra Assemblies zu packen. Dadurch bleiben PlugIns und die App auch bei einem Rebuild der App kompatibel. Natürlich nur wenn du die Assembly mit deiner PlugIn API nicht neu kompostierst. 😁

T
tigersammy Themenstarter:in
62 Beiträge seit 2006
vor 17 Jahren

Wie bekomme ich den sonnst ein Programm das man mit sich Selber Weiterentwikeln und neue Funktionen Schreiben Kann??

Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.

347 Beiträge seit 2006
vor 17 Jahren

Original von tigersammy
Wie bekomme ich den sonnst ein Programm das man mit sich Selber Weiterentwikeln und neue Funktionen Schreiben Kann?? Verstehe mich nicht falsch. Modularisierung, vor allem PlugIns, ist eine feine Sache.
Ich verstehe nur nicht warum deine App die PlugIns kompilieren soll.

Du musst dir ja nur Gedanken darüber machen, wie du ein PlugIn im laufenden Betrieb austauschen kannst[1]. Ein PlugIn wird kompiliert und der App wird mitgeteilt woher es die neuere Version beziehen kann.
Es ist absolut unnötig dass die App den Source code zu Gesicht bekommt.

[1]Zumindest klang es so als ob die App ständig durchlaufen soll

S
8.746 Beiträge seit 2005
vor 17 Jahren

Die Idee von PlugIns ist schon das richtig, aber diese erst aus dem Sourcecode zur Laufzeit zu erstellen ist eher schlecht.

Du compilierst die PlugIns einzeln als DLL und kannst sie dann dynamisch in dein Programm einladen. Die Erweiterung findet statt, indem man das PlugIn einfach an die richtige Stelle kopiert (da wo das Programm nach PlugIns sucht), oder indem man die verfügbaren PlugIns in einem Konfig-File angibt, ausliest und dann gezielt lädt. Das sind die beiden üblichen Verfahren, gibt aber noch weitere Alternativen.

T
tigersammy Themenstarter:in
62 Beiträge seit 2006
vor 17 Jahren

Ja das ist ja soweit ganz gut aber wie Kann ich den so ein PlugIN Programnmieren?
geschweige den Laden/entladen??

Ich dachte eigentlich das kann ich durch das Dynamische Rendern Über ganz normale klassen machen aber so schaut es nicht aus

evtl. auch eine Buch Empfelung zu dem Problem??

Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.

1.271 Beiträge seit 2005
vor 17 Jahren

Hallo tigersammy,

Am einfachsten wäre es, ein fertiges (und ausgereiftes) AddIn-System von Drittanbietern zu nehmen. Dazu empfehle ich dir den ICSharpCode.Core, der bei SharpDevelop eingesetzt wird. Dazu gibt es den sehr guten Code Project Artikel Building Applications with the SharpDevelop Core. Es gibt sogar ein kostenloses Ebook zu SharpDevelop, in dem auch die AddIn-Architektur gut beschrieben wird, es bezieht sich aber leider noch auf eine ältere Version: Dissecting a C# Application: Inside SharpDevelop.

Gruß,
progger

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

S
8.746 Beiträge seit 2005
vor 17 Jahren

Es geht aber u.U. auch viel einfacher, nämlich mit einer Handvoll Zeilen Code. Am besten mal nach "plugin c#" googlen. Gibt auch viel Material hier im Forum zum Thema (Suchbegriff: plugin).

PlugIn-Frameworks machen dann Sinn, wenn es schwieriger wird, d.h. PlugIns sich selbst in die Oberfläche einklinken sollen, PlugIns auch PlugIns haben können, PlugIn-Manager, etc.. Nur unterschiedliche Renderings verfügbar zu machen sollte auch ohne das alles gehen.

V
52 Beiträge seit 2006
vor 17 Jahren

Hi tigersammy
Fals du es doch selbst schreiben willst solltest du dich erst einmal über Dlls informieren und dann eben ein Interface schreiben.

Wenn ich noch ne Seite finde häng ich sie an

T
tigersammy Themenstarter:in
62 Beiträge seit 2006
vor 17 Jahren

danke mit dlls kenne ich mich soweit schon aus aber Interface ist ein Fremdwort für mich

Wenn ich eine SuSE-DVD an ein Schwein binde und dieses trete, laufen KDE & Co. auch ohne RAM recht schnell.

V
52 Beiträge seit 2006
vor 17 Jahren

gut hab mich vllt etwas unpräzise ausgedrückt

du musst dir eben überlegen worauf du dem plugin / der dll zugriff geben willst und dann entsprechende prototypen für die in der dll vorhandenen funktionen formulieren

wenn du also mit der dll ein fenster bearbeiten willst brauchst du eben eine funktion in der dll die ein fensterhandle entgegennimmt und dann bearbeitet.

vllt auch noch ne callback-funktion die Nachrichten von der dll entgegen nimmt (ich weiß das das win-api und keine .net begriffe sind, hoffe aber du weißt was ich meine 😉)