Guten Abend,
Ich bin gerade dabei mich in der CodeDom-Klasse einzulesen, um später zur Laufzeit eine .exe zu compilern.
Bei den meisten Online-Tutorials wird dabei auf den Stringbuilder-Klasse gesetzt. Also z.B. so:
StringBuilder Temp = new StringBuilder();
Temp.Append("@using System;");
...
...aber es ist/wäre viel zu aufwendig ein ganzes Programm so zu schreiben.
Gibt es da nicht noch eine andere Alternative?
Man kann immer nur gewisse Sachen automatisieren oder Schemen, bevor es uneffizient wird.
Wenn man eine ganze Anwendung automatisiert erstellen könnte oder dies effizient wär, wären unsere Jobs weg.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich weiss nicht was du genau vor hast, aber du kannst den sourcecode dank "@" auch in einen string packen:
string sourceCode = @"using System;
public class Test
{
// do some magic here
}";
Du könntest das vielleicht etwas netter mit dem neuen Roslyn Compiler machen und damit Code generieren
Entschuldigung für die späte Reaktion.
Im Prinzip muss, wie gesagt, nur eine Codezeile geändert werden, in der eine IP steht.
Sowas wie eine IP sollte gar nicht fest im Code stehen sondern extern konfigurierbar (zB XML) sein.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Das CodeDom Modell gibt es auch her, ein komplettes Programm per Definition über das Objekt Modell zu erstellen.
Für ein exemplarisches "using System.Data;" sieht das dann so aus:
CodeCompileUnit unit = new CodeCompileUnit();
CodeNamespace space = new CodeNamespace("MyProjectSpace");
unit.Namespaces.Add(space);
space.Imports.Add(new CodeNamespaceImport("System.Data"));
Die Dokumentation zu dieser API ist leider recht spärlich, mir wurde mal gesagt das Microsoft die volle Doku nur zertifizierten Partner Unternehmen auf Anfrage zugänglich macht. Wenn das stimmt, ist es nicht verwunderlich das die öffentlichen Beispiele eher auf String Schnipseleien setzen. (In einem MSDN Blog Post habe ich gelesen, das Microsoft diese Schnitstelle bisher nicht weiter gepusht hat weil einfach nie ein Grosskunde danach gefragt hat.)
Wesentlich aufwendiger ist das Verfahren mit dem String Builder aber nicht, bestenfalls etwas langsamer und weniger flexibel. Ein eigener Wrapper ist auch schnell gebaut.
Mit ein wenig Übung schreibt ist es mit der aktuellen Dokumentation ohne weiteres möglich fast alles zu generieren (wobei man nicht alles generieren kann... aber mit Umwegen ist es doch möglich). In meinem Job generiere ich jedenfalls jedenfalls ganze typisierte Proxies.
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Naja mein Problem ist, das ich nicht ein ganzes Programm, dass evtl. mehrere 100-Zeilen Code umfasst, später die ganze Zeit in den Stringbuilder zu schreiben.
Das funktoniert zwar, sieht aber unschön aus.
Hallo xorkind,
hier wurden dir bereits zwei Alternativen aufgezeigt:* per mehrzeiligem String mittels @ davor (siehe Sarc) oder
Allerdings ist es eh nicht der richtige Weg, CodeDom zu benutzen, wenn es nur darum geht, eine IP-Adresse auszutauschen.
herbivore
Naja mein Problem ist, das ich nicht ein ganzes Programm, dass evtl. mehrere 100-Zeilen Code umfasst, später die ganze Zeit in den Stringbuilder zu schreiben.
Lol ein paar hundert Zeilen ...Ich arbeite gerade an einer App in welcher 41000 Zeilen Code generiert sind... (und das ist nicht die grösste App).
CodeDom hat den Vorteil, dass Du Code in verschiedenen Sprachen generieren kannst (z.B: C# / VB / C)
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Allerdings ist es eh nicht der richtige Weg, CodeDom zu benutzen, wenn es nur darum geht, eine IP-Adresse auszutauschen.
Dann sag mir bitte was dann der "richtige Weg" ist? Ich will nicht umbedingt zwanghaft CodeDOM benutzen.
Mit dem @-Zeichen davor, habe ich aber das Problem das " nicht funktoniert.
Sowas wie eine IP sollte gar nicht fest im Code stehen sondern extern konfigurierbar (zB XML) sein.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Mit dem @-Zeichen davor, habe ich aber das Problem das " nicht funktoniert.
Das lässt sich damit lösen in dem man "" schreibt
Also so:
var MyString = @"blabla ""FooBar"" more blabla
and even with a NewLine!";
Wie Abt schon sagte, sowas wie eine IP-Adress (und der Port) gehört in eine Config-Datei.
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"
Die Frage nach der IP-Adresse hat mit dem tatsächlich behandelten CodeDom-Thema nichts zu tun, auch wenn erstere hier dein eigentliches Problem zu sein scheint. Sie fällt zudem unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1. Auch zu dem eigentlichen Thema ist spätestens nach der Antwort von ProGamer alles gesagt.