我已经使用内置的C#方法编写了一个编译器,如下所示:
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
string Output = "Out.exe";
Button ButtonObject = (Button)sender;
this.RadTextBox1.Text = string.Empty;
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
//Make sure we generate an EXE, not a DLL
parameters.GenerateExecutable = true;
parameters.OutputAssembly = Output;
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, RadTextBox1.Text);
if (results.Errors.Count > 0)
{
RadTextBox2.ForeColor = Color.Red;
foreach (CompilerError CompErr in results.Errors)
{
RadTextBox2.Text = RadTextBox2.Text +
"Line number " + CompErr.Line +
", Error Number: " + CompErr.ErrorNumber +
", '" + CompErr.ErrorText + ";" +
Environment.NewLine + Environment.NewLine;
}
}
else
{
//Successful Compile
RadTextBox2.ForeColor = Color.Blue;
Guid guid = Guid.NewGuid();
string PathToExe = Server.MapPath(Path.Combine(@"\Compiled" , Output));
FileStream fs = System.IO.File.Create(PathToExe);
using (StreamWriter sw = new StreamWriter(fs))
{
sw.Write(RadTextBox1.Text);
}
Response.WriteFile(PathToExe);
当我运行此代码并编写Main方法(例如http://msdn.microsoft.com/en-us/library/ms228506(VS.80).aspx中的代码示例)时,我收到此错误:
行号0,错误号码:CS5001,'程序'c:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ Out.exe'不包含适用于入口点的静态'Main'方法; < / p>
上面的代码用作我网站上编译器的基础(尚未生效)。因此,您键入代码并生成.exe程序集。但是当我在代码编写的文本框中输入代码(Radtextbox1)时,即使使用main方法,我也会收到错误。
是什么给出了?
由于
答案 0 :(得分:1)
入口点功能很特殊:您不能只将一个名为“main”的方法添加到程序集中。相反,您必须将CodeEntryPointMethod类型的实例添加到其中一个类中。
有关使用CodeEntryPointMethod的一些限制的详细信息,请参阅http://blogs.msdn.com/bclteam/archive/2005/10/01/475768.aspx。