myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » CodeDom: Inhalt von Variablen aus Hostprogramm im zu compilierenden Source Code verwenden!
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

geschlossen (weitere Infos)
Zum Ende der Seite springen  

CodeDom: Inhalt von Variablen aus Hostprogramm im zu compilierenden Source Code verwenden!

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22


R3alAvenger ist offline

CodeDom: Inhalt von Variablen aus Hostprogramm im zu compilierenden Source Code verwenden!

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Leute,ich bins schon wieder -___-

Ich habe folgendes Problem : Ich habe einen Builder (GUI) programmiert. Dort sind 3 Textboxen und ein Button drauf. Wenn man auf den Button drückt, wird der Source code in eine exe compiliert. Dieser Source Code soll meinen Bilder Ordner auf einen FTP-Server hochladen. Nun möchte ich, dass ich meine FTP-Daten in diese 3 Textboxen auf der Builder Form eingeben kann, diese sollen dann in den Source Code eingebunden werden... Genauer gesagt in diese Zeile (für den FTP-Server) :

C#-Code:
Temp.AppendLine(@"FtpWebRequest request = FtpWebRequest.Create(textBox6.Text) as FtpWebRequest;");

Wenn ich das ganze so mache, kriege ich beim compilieren eine Error von wegen textBox6 existiert nicht.

Wie kann ich das ganze umgestalten?

Lg
Der R3alAvenger (schon wieder)...
14.06.2013 20:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cat
myCSharp.de-Mitglied

avatar-3070.jpg


Dabei seit: 25.10.2009
Beiträge: 771


Cat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi, meinst du

C#-Code:
Temp.AppendLine(@"FtpWebRequest request = FtpWebRequest.Create(" + textBox6.Text + ") as FtpWebRequest;");

??? Die TextBox ist doch in deinem Programm und nicht im zu kompilierenden Source!
14.06.2013 20:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Also ich habe einen Builder (eine GUI,Form). Diese beinhaltet 3 Textboxen,jeweils für Server,Name und Passwort. Ich möchte dass ich in diese 3 Textboxen meinen FTP-Server,Namen und Passwort eingeben kann. Diese sollen dann in den zu compilieren source code eingebunden werden (siehe code oben,damit die Request an den FTP-Server gesendet wird der in der Textbox steht)...
Es ist bisschen schwer zu erklären^^

Wenn ich es so mache wie du es sagst kriege ich folgenden Error :

R3alAvenger hat dieses Bild (verkleinerte Version) angehängt:
222.png
Volle Bildgröße

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von R3alAvenger am 14.06.2013 21:05.

14.06.2013 21:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Nochmal hier meine Textboxen aus meinem .exe "Bauer" :

R3alAvenger hat dieses Bild (verkleinerte Version) angehängt:
321321.png
Volle Bildgröße

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von R3alAvenger am 14.06.2013 21:05.

14.06.2013 21:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cat
myCSharp.de-Mitglied

avatar-3070.jpg


Dabei seit: 25.10.2009
Beiträge: 771


Cat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sorry, hatte die Anführungsstriche oben vergessen:

C#-Code:
Temp.AppendLine("FtpWebRequest request = FtpWebRequest.Create(\"" + textBox6.Text + "\") as FtpWebRequest;");

Beachte den Backslash als Escapezeichen (und dafür dann @ entfernt).

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Cat am 14.06.2013 21:10.

14.06.2013 21:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe eben in meinem Post noch ein Bild hinzugefügt wo ich einen Error durch deine gesagte Methode bekomme :/
14.06.2013 21:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cat
myCSharp.de-Mitglied

avatar-3070.jpg


Dabei seit: 25.10.2009
Beiträge: 771


Cat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Sorry, da haben wir wohl beide gleichzeitig editiert.
14.06.2013 21:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich kriege immernoch den selben Error....
Schau mal hier mein kompletter code :

C#-Code:
        private void button2_Click(object sender, EventArgs e)
        {
            SaveFileDialog d = new SaveFileDialog();
            d.Filter = "Executable (*.exe)|*.exe";
            if (d.ShowDialog() == DialogResult.OK)
            {
                string source = Properties.Resources.source;
                CompilerParameters param = new CompilerParameters();
                param.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox1.Text + "\"";
                param.GenerateExecutable = true;
                param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
                param.ReferencedAssemblies.Add("System.dll");
                param.OutputAssembly = d.FileName;

                string name;
                name = "C:\\Users\\BT\\Desktop";

                StringBuilder Temp = new StringBuilder();
                String InputCode = String.Empty;
                InputCode = "";
                Temp.AppendLine(@"using System;");
                Temp.AppendLine(@"using System.Windows.Forms;");
                Temp.AppendLine(@"using System.Net;");
                Temp.AppendLine(@"using System.IO;");
                Temp.AppendLine(@"namespace RunTimeCompiler{");
                Temp.AppendLine(@"public class Test{");
                Temp.AppendLine(@"static void Main(string[] args){");
                Temp.AppendLine("FtpWebRequest request = FtpWebRequest.Create(\"" + textBox6.Text + "\") as FtpWebRequest;");
                Temp.AppendLine(@"request.Method = WebRequestMethods.Ftp.UploadFile;");
                Temp.AppendLine(@"request.Credentials = new NetworkCredential("+textBox7.Text+","+textBox8.Text+");");
                Temp.AppendLine(@"request.UsePassive = true;");
                Temp.AppendLine(@"request.KeepAlive = false;");
                Temp.AppendLine(@"FileStream stream = File.OpenRead(@name);");
                Temp.AppendLine(@"byte[] buffer = new byte[stream.Length];");
                Temp.AppendLine(@"stream.Close();");
                Temp.AppendLine(@"Stream reqStream = request.GetRequestStream();");
                Temp.AppendLine(@"reqStream.Write(buffer,0,buffer.Length);");
                Temp.AppendLine(@"reqStream.Close();");

                Temp.AppendLine(InputCode);
                Temp.AppendLine(@"}}}");
                CompilerResults result = new CSharpCodeProvider().CompileAssemblyFromSource(param, Temp.ToString());
                if (result.Errors.Count > 0) foreach (CompilerError err in result.Errors) MessageBox.Show(err.ToString());
                else MessageBox.Show("Done.");
            }
14.06.2013 21:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cat
myCSharp.de-Mitglied

avatar-3070.jpg


Dabei seit: 25.10.2009
Beiträge: 771


Cat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Bei deinen anderen beiden TextBoxen (sowie der Variablen 'name') mußt du das natürlich auch so abändern.
Und kapsel den CodeDom-Code in eine eigene Methode (anstatt direkt im Button-Click) und benenne deine GUI-Elemente (TextBoxen etc.) besser.

Aber mal ein anderer Tipp:
Viel einfacher könntest du es dir machen, wenn du den Source-Code als (Resource-)Datei hältst und einliest und dann vor dem Kompilieren z.B. mittels Ersetzen von "%FTP_SERVER%" etc. die TextBox-Werte dort einträgst.

C#-Code:
string code = File.ReadAllText("SourceCode.template"); // oder als Resource, z.B.  Properties.Resources.SourceCode
code = code.Replace("%FTP_SERVER%", textboxFtpServer.Text);
// und die anderen auch noch ersetzen

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von Cat am 14.06.2013 21:42.

14.06.2013 21:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Jetzt siehts so aus und ich kriege nur noch zwei error nachrichten :
<siehe Anhang>

C#-Code:
private void button2_Click(object sender, EventArgs e)
        {
            SaveFileDialog d = new SaveFileDialog();
            d.Filter = "Executable (*.exe)|*.exe";
            if (d.ShowDialog() == DialogResult.OK)
            {
                string source = Properties.Resources.source;
                CompilerParameters param = new CompilerParameters();
                param.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox1.Text + "\"";
                param.GenerateExecutable = true;
                param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
                param.ReferencedAssemblies.Add("System.dll");
                param.OutputAssembly = d.FileName;

                string name;
                name = "C:\\Users\\BT\\Desktop";

                StringBuilder Temp = new StringBuilder();
                String InputCode = String.Empty;
                InputCode = "";
                Temp.AppendLine(@"using System;");
                Temp.AppendLine(@"using System.Windows.Forms;");
                Temp.AppendLine(@"using System.Net;");
                Temp.AppendLine(@"using System.IO;");
                Temp.AppendLine(@"namespace RunTimeCompiler{");
                Temp.AppendLine(@"public class Test{");
                Temp.AppendLine(@"static void Main(string[] args){");
                Temp.AppendLine("FtpWebRequest request = FtpWebRequest.Create(\"" + textBox6.Text + "\") as FtpWebRequest;");
                Temp.AppendLine(@"request.Method = WebRequestMethods.Ftp.UploadFile;");
                Temp.AppendLine("request.Credentials = new NetworkCredential(\"" + textBox7.Text + "," + textBox8.Text + "\");");
                Temp.AppendLine(@"request.UsePassive = true;");
                Temp.AppendLine(@"request.KeepAlive = false;");
                Temp.AppendLine("FileStream stream = File.OpenRead(@name);");
                Temp.AppendLine(@"byte[] buffer = new byte[stream.Length];");
                Temp.AppendLine(@"stream.Close();");
                Temp.AppendLine(@"Stream reqStream = request.GetRequestStream();");
                Temp.AppendLine(@"reqStream.Write(buffer,0,buffer.Length);");
                Temp.AppendLine(@"reqStream.Close();");

                Temp.AppendLine(InputCode);
                Temp.AppendLine(@"}}}");
                CompilerResults result = new CSharpCodeProvider().CompileAssemblyFromSource(param, Temp.ToString());
                if (result.Errors.Count > 0) foreach (CompilerError err in result.Errors) MessageBox.Show(err.ToString());
                else MessageBox.Show("Done.");
            }
        }

R3alAvenger hat dieses Bild (verkleinerte Version) angehängt:
123123.png
Volle Bildgröße

14.06.2013 21:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

und

R3alAvenger hat dieses Bild (verkleinerte Version) angehängt:
222a.png
Volle Bildgröße

14.06.2013 21:28 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Cat
myCSharp.de-Mitglied

avatar-3070.jpg


Dabei seit: 25.10.2009
Beiträge: 771


Cat ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe oben noch mal nacheditiert (der Thread ist wahrscheinlich jetzt nicht mehr ganz einfach nachzuvollziehen?).

Noch ein Edit:
ich sehe gerade, daß du ja schon mittels

C#-Code:
string source = Properties.Resources.source;

den Source-Code einbindest (aber bisher nicht benutzt). Dann kannst du ja meinen Tipp direkt befolgen.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Cat am 14.06.2013 21:39.

14.06.2013 21:31 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
R3alAvenger R3alAvenger ist männlich
myCSharp.de-Mitglied

Dabei seit: 12.05.2013
Beiträge: 22

Themenstarter Thema begonnen von R3alAvenger

R3alAvenger ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ok ich werde es jetzt mal komplett umbasteln und deine methode mit der ressource versuchen!
Vielen dank!
14.06.2013 21:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
myCSharp.de
Moderationshinweis von herbivore (15.06.2013 07:28):

Bitte beachte  [Hinweis] Wie poste ich richtig? Punkt 1.1.1, 1.1 und  [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).

Immer nur die Fehlermeldungen und den Code posten, ist nicht die feine Art. Bitte macht das nicht noch mal. Siehe dazu Punkt 4.

Hänge außerdem Bilder immer als Dateianhang an und lege sie nicht auf externe Hoster, siehe Punkt 6.1. => korrigiert

Wenn die Bilder Fehlermeldungen enthalten, dann poste deren Text besser direkt im Beitrag, dann kann er auch über die Suche gefunden werden, siehe Punkt 5 und  [Tipp] Strg-C kopiert MessageBox-Inhalt.

 
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 7 Jahre.
Der letzte Beitrag ist älter als 7 Jahre.
geschlossen (weitere Infos)


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 15.08.2020 03:39