0

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

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);
            }
        }
4

1 回答 1

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 ...");
于 2013-06-15T20:59:31.590 回答