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 に答える