Autor Beitrag
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: So 05.01.14 22:24 
Moin,

ist es Möglich, dass der Compiler bestimmten Code direkt ausführt und danach nicht mit in die erstellte exe einbaut?

Hintergrund ist der, dass ich gerne bestimmte Informationen über eine Assembly in eine extra Datei speichern würde, die dann von anderer Stelle ausgelesen werden können.
Diese Informationen sollen aber der Einfachheit wegen automatisch aus den programmierten Code-Dateien generiert und geschrieben werden.
Nach er Kompilierung ist dieser Code, der die Informationen erzeugt, aber nicht mehr von Bedeutung.

Ist das irgendwie möglich, oder sind die einzigen Möglichkeiten, die ich da habe, diese?


Gruß
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 05.01.14 23:44 
Wenn es nicht zu Code kompiliert wird wieso sollte das dann im Code stecken? Wenn es einfach während (bzw. vor oder nach) dem kompilieren erfolgen soll würde ich einen prä/post build Event vorschlagen und da das nötige ausführen. Der BuildCode gehört für mich genauso zum Projekt wie die Codedateien.
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 06.01.14 00:11 
Es geht mir darum, so eine Art kleines Plugin-System zu entwerfen. Ich hab an zentraler Stelle ein paar Interfaces erstellt und jedes neue Plugin muss diese implementieren.

Da ich nicht die passende Assembly, die die Interfaces implementiert, irgendwo suchen und anschließend jede Klasse auf jedes der gesuchten Interfaces durchsuchen möchte, habe ich mir gedacht, dass jede Implementierung registriert wird. Es wird also eine Datei erstellt, in der die Assembly und die Klasse dem Interface zugeordnet werden, das die Klasse implementiert.

An der Stelle, wo die konkreten Implementierungen genutzt werden sollen, wird nun in dieser Datei nach geschaut, wo denn Implementierungen liegen und kann so ohne großen Aufwand eine konkrete Implementierung erhalten.

Nun geht es aber darum, diese Zuordnungen auch in eine Datei zu speichern und genau das würde ich gerne immer automatisch machen lassen, indem irgendwo ein kleiner Code-Abschnitt steht, der jede konkrete Implementierung und das implementierte Interface registriert.

Ich hatte gehofft, dass das kompiliert und ausgeführt werden kann, aber nicht in der abschließenden Datei zu finden ist.
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Mo 06.01.14 00:32 
Meinst du sowas wie DLLs, oder bin ich jetzt voll auf dem falschen Dampfer?
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 06.01.14 00:38 
Genau, ich meine DLLs.

Ich hab vor, den Pfad zur DLL und den vollständigen Typ-Namen zu nutzen um das Interface aus der eigentlichen Anwendung der Klasse aus einer DLL zuzuordnen. Eine andere Möglichkeit wäre, wenn ich die DLLs in einen Ordner lege und dann von dort aus jede Klasse jeder DLL auf das Interface teste, wirklich schön finde ich das aber nicht gerade.

Deshalb die Zuordnung in einer extra Datei.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 06.01.14 01:05 
Wenn ich das verstanden habe würde ich im PostBuild ein kleinen Batch starten der den Ausgabeordner (oder sonstigen Library Ordner) durchrennt die erstellten Assemblies prüft und Treffer in einer Config nachträgt(vom mir aus der App.config). Sehe immer noch nicht den Dreh warum das im Code während dem kompilierieren passieren sollte.
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 06.01.14 01:19 
Nennen wir es Faulheit :D

Es muss auch nicht im Code der gerade erstellten Anwendung passieren, wichtig ist nur, dass es irgendwo C#-Code ist.

Eine Batch funktioniert ja leider nicht, da ich auch konkretere Informationen zu bestimmten Typen benötige.
Wie ich das alles schreibe, ist auch nicht weiter schwer. Das Schreiben und Lesen habe ich in einer extra DLL liegen.

Es ist nur deutlich einfacher, wenn ich 10 Zeilen Code schreibe, wo ich den Typ und den Konstruktor übergebe und anschließend speichere, als wenn ich das manuell machen muss.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 06.01.14 07:09 
Dann startest du halt eine in C# geschriebene Exe in der Batchdatei oder direkt die Exe als Buildevent.
Palladin007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 06.01.14 10:33 
Gut, das wäre auch eine Variante.

Ich hatte nur gehofft, dass es eine Möglichkeit gibt, wo ich nicht immer eine extra kleine exe erstellen muss.