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;
}
您的代码不正确。在另一个方法中有一个方法,这是不允许的。因此,编译器声明它期望}
在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(@"}}}}");