Ошибка не содержит статического основного метода, подходящего для точки входа

Я получил эту ошибку, когда пытаюсь скомпилировать исходный код с помощью CodeDom.

Не содержит статического «Основного» метода, подходящего для точки входа!

Я уже гуглил и читал другие ответы здесь, но я не знаю, как это исправить.

Кто-нибудь может мне помочь? Вот мой исходный код: 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.");
        }
    }

person GumGun    schedule 13.06.2013    source источник
comment
Какая часть ошибки вам не понятна?   -  person SLaks    schedule 13.06.2013
comment
Подсказка: msdn.microsoft.com/en-us/library/acy3edy3 ( Найдите в Google C# main)   -  person SLaks    schedule 13.06.2013
comment
Можете ли вы опубликовать этот код в своем вопросе?   -  person fvrghl    schedule 13.06.2013
comment
@SLaks я понимаю ошибку, но не знаю, как ее исправить. Я уже пытался добавить статический метод с именем main в исходный код, но он не сработает, потому что тогда я получаю новую ошибку...   -  person GumGun    schedule 13.06.2013
comment
это конечно не смешно, но немного смешно   -  person Jonesopolis    schedule 13.06.2013
comment
@GumGun: методы должны быть определены внутри классов.   -  person SLaks    schedule 13.06.2013


Ответы (3)


Все программы C# должны содержать метод Main(). По сути, здесь начинается программа. Код, который вы разместили, является лишь небольшой частью всего приложения. Вы, должно быть, удалили место, где проживал main.

Статья MSDN на главной странице

Обновлено для комментариев:

Новое приложение Windows Form имеет класс Program, который создает экземпляр нужной формы.

    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 теперь указывает на форму, которую вы создали в приложениях.

person Alexander Matusiak    schedule 13.06.2013
comment
Сэр, теперь я переработал свой код, но я получаю больше ошибок... Пожалуйста, взгляните на мой исходный код еще раз, я его отредактировал ^^ - person GumGun; 13.06.2013
comment
Я предполагаю, что это приложение WinForms? - person Alexander Matusiak; 13.06.2013
comment
Я получаю следующие ошибки: picz.to/image/s80 - person GumGun; 13.06.2013
comment
Нет, код, который должен скомпилироваться, — это просто окно сообщений^^ - person GumGun; 13.06.2013

Вставьте это в свой класс — если вы все еще получаете сообщение об ошибке, вам нужно вставить весь рассматриваемый класс, а не только снимок экрана обработчика события для нажатия кнопки.

static void Main(string[] args)
{
  //do nothing
}
person Cortright    schedule 13.06.2013
comment
//ничего не делать, должна начаться ваша форма - person Jonesopolis; 13.06.2013
comment
Теперь я получаю другую ошибку: picz.to/image/s80 Я уже редактировал эту строку, вы можете смотри выше в моем посте ^^ - person GumGun; 13.06.2013
comment
Я просто хочу скомпилировать окно сообщения :) - person GumGun; 13.06.2013

Код, который вы разместили, является событием нажатия кнопки. Кнопка обычно находится на форме, и форма должна быть инициализирована. Если вы создадите приложение Windows Forms, оно создаст файл Program.cs, содержащий метод Main, который запускает вашу форму.

Когда вы запускаете программу, компьютер должен знать, где на самом деле начать выполнение кода, для чего и предназначен метод Main(). Это необходимо для запуска, и это ошибка, которую вы получаете.

person Jonesopolis    schedule 13.06.2013