【问题标题】:Error "Does not contain a static "Main" Method suitable for an entry point [duplicate]错误“不包含适合入口点的静态“主要”方法[重复]
【发布时间】:2013-06-10 08:00:08
【问题描述】:

当我尝试使用 CodeDom 编译源代码时出现此错误

不包含适合入口点的静态“Main”方法!

我已经用谷歌搜索过它并在这里阅读了其他答案,但我不知道如何解决它。

有人可以帮帮我吗? 这是我的源代码: http://picz.to/image/ao5n

    ^        private void button2_Click(object sender, EventArgs e)
    {
        SaveFileDialog d = new SaveFileDialog();
        d.Filter = "Executable (*.exe)|*.exe";
        if (d.ShowDialog() == DialogResult.OK)
        {
            string source = Properties.Resources.source;
            CompilerParameters param = new CompilerParameters();
            param.CompilerOptions += "/target:winexe" + " " + "/win32icon:" + "\"" + textBox1.Text + "\"";
            param.GenerateExecutable = true;
            param.ReferencedAssemblies.Add("System.Windows.Forms.dll");
            param.ReferencedAssemblies.Add("System.dll");
            param.OutputAssembly = d.FileName;

            StringBuilder Temp = new StringBuilder();
            String InputCode = String.Empty;
            InputCode = "MessageBox.Show((1 + 2 + 3).ToString());";
            Temp.AppendLine(@"using System;");
            Temp.AppendLine(@"using System.Windows.Forms;");
            Temp.AppendLine(@"namespace RunTimeCompiler{");
            Temp.AppendLine(@"static void Main(string[] args){");

            Temp.AppendLine(@"public class Test{");
            Temp.AppendLine(@"public void Ergebnis(){");

            Temp.AppendLine(InputCode);
            Temp.AppendLine(@"}}}}");
            CompilerResults result = new CSharpCodeProvider().CompileAssemblyFromSource(param, Temp.ToString());
            if (result.Errors.Count > 0) foreach (CompilerError err in result.Errors) MessageBox.Show(err.ToString());
            else MessageBox.Show("Done.");
        }
    }

【问题讨论】:

  • 错误的哪一部分你不明白?
  • 提示:msdn.microsoft.com/en-us/library/acy3edy3(在 Google 上搜索 C# main
  • 您可以在您的问题中发布该代码吗?
  • @SLaks 我理解错误,但我不知道如何修复它。我已经尝试在源代码中添加一个名为 main 的静态方法,但它不起作用,因为我得到一个新的错误...
  • 肯定不好笑,但是有点好笑

标签: c# codedom


【解决方案1】:

所有 C# 程序都需要包含 Main() 方法。本质上这是程序开始的地方。您发布的代码只是整个应用程序的一小部分。您一定已经删除了 main 所在的位置。

MSDN Article on Main

为 cmets 更新:

一个新的 Windows 窗体应用程序有一个程序类,用于实例化您想要的窗体。

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
     }

尝试将其复制到名为 program.cs 的新文件中。确保 Form1 现在指向您在应用程序中创建的表单。

【讨论】:

  • 先生,我现在的代码工作量太大了,但我得到了更多的错误...请再看一下我的源代码,我编辑了它^^
  • 我认为这是一个 WinForms 应用程序?
  • 我得到的错误是:picz.to/image/s80
  • 不应该编译的代码只是一个消息框^^
【解决方案2】:

将其粘贴到您的类中——如果仍然出现错误,您需要粘贴整个有问题的类,而不仅仅是单击按钮的事件处理程序的屏幕截图。

static void Main(string[] args)
{
  //do nothing
}

【讨论】:

  • //什么都不做应该开始你的表单
  • 现在我得到另一个错误:picz.to/image/s80我已经编辑了这一行,你可以在我的帖子上面看到它^^
  • 我只想编译一个消息框:)
【解决方案3】:

您发布的代码是按钮的点击事件。按钮通常在表单上,​​并且必须初始化表单。如果您创建 Windows 窗体应用程序,它将创建一个 Program.cs 文件,其中包含启动您的窗体的 Main 方法。

当你启动一个程序时,计算机需要知道从哪里开始运行代码,这就是 Main() 方法的用途。它需要运行,这就是您收到的错误。

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 2014-12-13
    • 2018-05-02
    • 2016-04-28
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多