如何在CodeDom源代码中使用?

时间:2013-06-15 20:54:02

标签: c# codedom

我想将此行附加到将要编译的源代码:

Temp.AppendLine(@"[assembly: AssemblyDescription("[DESCRIPTION]"]);"); 

但你看到[DESCRIPTION]也不在字符串中...... 而不是[DISCRIPTION]我想使用TextBox的输入。我怎么能这样做?

        private void button1_Click(object sender, EventArgs e)
    {
        SaveFileDialog d = new SaveFileDialog();
        d.Filter = "Executable (*.exe)|*.exe";
        if (d.ShowDialog() == DialogResult.OK)
        {

            String InputCode = String.Empty;
            String regcode = String.Empty;
            //Unser TestCode, in dem Wir ein MessageBox aufrufen
            InputCode = "MessageBox.Show((1 + 2 + 3).ToString());";

            System.CodeDom.Compiler.CodeDomProvider CodeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
            //Parameter für die Compilierung, wie die einzubindenen Bibliotheken usw.
            System.CodeDom.Compiler.CompilerParameters CompilerParameters = new System.CodeDom.Compiler.CompilerParameters();
            CompilerParameters.ReferencedAssemblies.Add("System.dll");
            CompilerParameters.OutputAssembly = d.FileName;
            CompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            CompilerParameters.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox6.Text + "\"";
            CompilerParameters.GenerateExecutable = true;
            CompilerParameters.GenerateInMemory = false;

            //Über den StringBuilder wird der Code zusammengesetzt
            StringBuilder Temp = new StringBuilder();
            Temp.AppendLine(@"using System;");
            Temp.AppendLine(@"using System.Windows.Forms;");
            Temp.AppendLine(@"using System.Diagnostics;");
            Temp.AppendLine(@"namespace RunTimeCompiler{");
            Temp.AppendLine(@"public class Test{");
            Temp.AppendLine(@"public static void Main(){");

            Temp.AppendLine(@InputCode);
            Temp.AppendLine(@"}");
            Temp.AppendLine(@"public void Ergebnis(){");
            Temp.AppendLine(@"}}}");


            //Compilieren
            System.CodeDom.Compiler.CompilerResults CompilerResults = CodeDomProvider.CompileAssemblyFromSource(CompilerParameters, Temp.ToString());
            //Auf CompilerFehler prüfen
            if (CompilerResults.Errors.Count > 0)
            {
                MessageBox.Show(CompilerResults.Errors[0].ErrorText, "Fehler bei Laufzeitkompilierung", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            else
            {
                MessageBox.Show("Done", "Finished", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

1 个答案:

答案 0 :(得分:0)

获取TextBox输入,将其转换为C#字符串文字并将其放在包含属性代码的字符串中:

string description = textBox1.Text;

string descriptionAsCsharpStringLiteral =
    "@\"" + description.Replace("\"", "\"\"") + "\"";

string attribute =
    "[assembly: AssemblyDescription(" + descriptionAsCsharpStringLiteral + ")]";

Temp.AppendLine("using System.Reflection;")
    .AppendLine(attribute)
    .AppendLine("namespace ...");