C# CodeDom "} Expected"

本文关键字:quot Expected CodeDom | 更新日期: 2023-09-27 18:18:28

我玩了一下CodeDom,得到了一个错误消息。错误信息是

}预期!

我试着搜索错误,但找不到任何有价值的东西。为什么会出现这个错误?

String InputCode = String.Empty;
InputCode = "MessageBox.Show((1 + 2 + 3).ToString());";
System.CodeDom.Compiler.CodeDomProvider CodeDomProvider = System.CodeDom.Compiler.CodeDomProvider.CreateProvider("CSharp");
System.CodeDom.Compiler.CompilerParameters CompilerParameters = new System.CodeDom.Compiler.CompilerParameters();
CompilerParameters.ReferencedAssemblies.Add("System.dll");
CompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
CompilerParameters.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "'"" + textBox6.Text + "'"";
CompilerParameters.GenerateInMemory = true;
StringBuilder Temp = new StringBuilder();
Temp.AppendLine(@"using System;");
Temp.AppendLine(@"using System.Windows.Forms;");
Temp.AppendLine(@"namespace RunTimeCompiler{");
Temp.AppendLine(@"public class Test{");
Temp.AppendLine(@"public static void Main(){");
Temp.AppendLine(@"public void Ergebnis(){");
Temp.AppendLine(InputCode);
Temp.AppendLine(@"}}}}}");
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;
}

C# CodeDom "} Expected"

您的代码不正确。在另一个方法中有一个方法,这是不允许的。因此,编译器声明它期望}public void Ergebnis()之前。

你的代码如果你写出来是

1. using System;
2. using System.Windows.Forms;
3. namespace RunTimeCompiler {
4. public class Test {
5.     public static void Main() {
6.        public void Ergebnis() {
7.            MessageBox.Show((1 + 2 + 3).ToString());
8.        }
9.     }
10.}
11.}
12.}

注意,在第6行,您需要在声明下一个方法之前关闭Main的方法作用域。正确的程序应该是

using System;
using System.Windows.Forms;
namespace RunTimeCompiler {
public class Test {
    public static void Main() {
        new Test().Ergebnis();
    }
    public void Ergebnis() {
        MessageBox.Show((1 + 2 + 3).ToString());
    }
}
}

在您粘贴的代码的末尾,您的if语句缺少一个右括号,并且看起来下面一行中有一个额外的}:

Temp.AppendLine(@"}}}}}");

看起来应该是:

Temp.AppendLine(@"}}}}");