Entwickler-Ecke

Sonstiges (.NET) - Mit einer C# exe einen Code kompilieren?


Ccenter - Do 25.03.10 19:09
Titel: Mit einer C# exe einen Code kompilieren?
Moin,
Ich würde gerne ein Programm schreiben, welches den eigenen Sourcecode als string in den Ressourcen gespeichert hat. Je nach Situation bzw. Wunsch des Anwenders würde ich gerne den Code vom Programm selbst ändern lassen und diesen dann neu kompilieren. Ansich kann ich den Code ja per StreamWriter als *.cs abspeichern. allerdings fehlt dann der Kompiler. Gibt es zufällig einen Code dafür um soetwas zu kompilieren?


Kha - Do 25.03.10 21:01

Dein Anwender kann C# :gruebel: ? Solche Anwender will ich auch haben ;) .

user profile iconCcenter hat folgendes geschrieben Zum zitierten Posting springen:
allerdings fehlt dann der Kompiler.
Nein, der ist bei jeder .NET-Installation dabei.
Schau dir mal CodeDOM an, damit musst du den csc erst gar nicht aufrufen: http://support.microsoft.com/kb/304655


Ccenter - Fr 26.03.10 22:25

Perfekt, funktioniert :D
Danke^^


Ccenter - Sa 30.10.10 12:57

Hab mich ebend nochmal schnell rangesetzt und mir ist aufgefallen, dass der Kompiler mit besimmten Usings nicht klar kommt wie z.B. Linq.
Der Grund dafür ist wohl, dass Using nicht reicht. Im Designer muss man bei neuen Dll's ja auch immer noch auf Verweis->Hinzufügen klicken. Meine Frage ist nun, wie gebe ich das im Code an und wo sind denn Linq, System.Windows.Forms etc? Eine Dll kann man per Code ja mit [DllImport("...")] einbinden. Dann muss man aber auch public static extern benutzen. Gibt es keinen Weg die Dll einfach so hinzu zufügen und dann den Code zu benutzen wie im Designer?

Und zweitens: Wie kann ich per Code, Datein in die Ressourcen einbinden?


Th69 - Sa 30.10.10 13:37

Die referenzierten DLLs mußt du direkt bei den

C#-Quelltext
1:
CompilerParameters.ReferencedAssemblies                    

angeben (z.B. per Add/AddRange)

Du mußt deinen Usern also zusätzlich die DLLs zur Auswahl stellen bzw. diese müssen mittels OpenFileDialog eigene referenzieren können.
(Mittels [DLLImport] werden nur native DLLs angesprochen, nicht .NET Assemblies.)


Ccenter - Sa 30.10.10 18:27

Ok danke, das läuft jetzt soweit alles,
aber wie kann ich nun per Code Datein den Ressourcen hinzufügen?


jaenicke - Sa 30.10.10 23:57

Ressourcen sind dafür da, dass du Daten in der Exe mitlieferst. Nicht um zur Laufzeit verändert zu werden.

Es gibt die API-Funktion UpdateResource [http://msdn.microsoft.com/en-us/library/ms648049(VS.85).aspx] usw., womit man Resourcen ändern kann. Zu empfehlen ist es dennoch nicht.


Ccenter - So 31.10.10 15:30

Ich habe ja eine Exe die im Stande ist, einen Code zu kompilieren. Wenn ich diesem Code dann ein Bild mitgeben möchte, muss ich das dann bevor die Exe erstellt wird machen oder nachdem sie fertig ist?
Gab es nicht eine Klasse namens RessourceWriter oder so die das kann?


jaenicke - So 31.10.10 15:53

Ach so meinst du das, nun, genau das geht mit dieser API-Funktion.

user profile iconCcenter hat folgendes geschrieben Zum zitierten Posting springen:
Gab es nicht eine Klasse namens RessourceWriter oder so die das kann?
Ja, gibt es, siehe Doku, die kapselt vermutlich genau diese API-Funktionen:
http://msdn.microsoft.com/de-de/library/system.resources.resourcewriter(VS.80).aspx