2014-09-04 2 views
0

Я немного огляделся, и никто не смог ответить на это. У меня статическая основная пустота, и похоже, что она должна работать.Не содержит статического «основного» метода, подходящего для точки входа;

Компилятор:

CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp"); 
     string Output = "Out.exe"; 
     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, Properties.Resources.source); 

     if (results.Errors.Count > 0) 
     { 
      foreach (CompilerError CompErr in results.Errors) 
      { 
       WinBody.Text = 
          "Line number " + CompErr.Line + 
          ", Error Number: " + CompErr.ErrorNumber + 
          ", '" + CompErr.ErrorText + ";" + 
          Environment.NewLine + Environment.NewLine; 
      } 
     } 
     else 
     { 
      //Successful Compile 
      MessageBox.Show("yay"); 
     } 

source.txt

using System; 

namespace HelloWorld 
{ 
/// <summary> 
/// Summary description for Class1. 
/// </summary> 
class HelloWorldClass 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine("Hello World!"); 
     Console.ReadLine(); 
    } 
} 

Почему я получаю сообщение об ошибке по этому поводу? Я действительно не понимаю. Этот же код работает с моими другими проектами.

+0

Такая же ошибка. Все еще не работает. – user3818701

+2

@SamIam В C# нет требования, чтобы 'Main' был общедоступным. –

+0

@ user3818701 Вы пытались установить свойство 'MainClass' вашего экземпляра' CompilerParameters' на 'HelloWorldClass'? –

ответ

0

Вы можете проверить все открытые Скобки были закрыты, я вижу один не хватает в конце для пространства имен ... А также проверить, если у вас есть какие-либо другие Main() класс, объявленный в других классах ...

0

Ошибка в том, что вы должны установить закрывающую скобку пространства имен. Ваш источник должен выглядеть так:

using System; 

namespace HelloWorld 
{ 
    /// <summary> 
    /// Summary description for Class1. 
    /// </summary> 
    class HelloWorldClass 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello World!"); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

Компилятор выдаст ошибку ... вы правы, но ошибка перед этой частью. –

+0

Замените ресурс для исходного текста и повторите попытку, если проблема является исключением, вы могли бы дать мне сообщение и строку? – hdkrus

1

Нет проблем с кодом. Я пробовал. Если вы замените свой Properties.Resources.source фактическим кодом, который вы указали, вы заметите, что произошла ошибка компилятора. Поэтому проблема заключается в вашем ресурсе. Дважды проверьте это.

Сообщалось, что есть свойство MainClass, которое вы можете применить к CompilerParameters. Это позволяет вам выбирать, где будет ваша точка входа.

MSDN: http://msdn.microsoft.com/en-us/library/system.codedom.compiler.compilerparameters.mainclass(v=vs.110).aspx

0

Ваш файл source.txt неверно (не уверен, если он был вставлен неправильно в переполнение стека). Должно быть:

using System; 

namespace HelloWorld 
{ 
    /// <summary> 
    /// Summary description for Class1. 
    /// </summary> 

    class HelloWorldClass 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Hello World!"); 
      Console.ReadLine(); 
     } 
    } 
// Add missing bracket 
} 

Ваш компилятор фрагмент кода не включает фактическую основную функцию входа, но я попробовал ваш код в моем приложении, как есть. Я создал # приложение WPF C (WpfApplication2), добавлена ​​source.txt, добавлена ​​WinBody Textbox к главному окну и использовал следующий код:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Imaging; 
using System.Windows.Navigation; 
using System.Windows.Shapes; 
using System.CodeDom.Compiler; 

namespace WpfApplication2 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     {    
      InitializeComponent(); 
      CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp"); 
      string Output = "Out.exe"; 
      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, Properties.Resources.source); 

      if (results.Errors.Count > 0) 
      { 
       foreach (CompilerError CompErr in results.Errors) 
       { 
        WinBody.Text += 
           "Line number " + CompErr.Line + 
           ", Error Number: " + CompErr.ErrorNumber + 
           ", '" + CompErr.ErrorText + ";" + 
           Environment.NewLine + Environment.NewLine; 
       } 
      } 
      else 
      { 
       //Successful Compile 
       MessageBox.Show("yay"); 
       //Run App 
       Process.Start(Output); 
      } 
     } 
    } 
} 

Код внутри MainWindow() после InitializeComponent() взят почти дословно из фрагмента кода в OP в. Исключения составляют WinBody.Text =, поэтому было добавлено несколько сообщений об ошибках: WinBody.Text +=; Я запустил скомпилированное приложение в конце с Process.Start(Output);, чтобы подтвердить его печать Hello World!. Он успешно запускает и печатает Hello World!. Если я использую источник source.txt OP с отсутствующим скобкой, я не получаю «yay» (это правильно), и текстовое поле имеет эту ошибку: «Номер строки 15, номер ошибки: CS1513») ожидается; чего и следовало ожидать.

Смежные вопросы

 Смежные вопросы