2012-07-31 9 views
7

Problem polega na tym, że po dodaniu nowej klasy pojawił się błąd podczas tworzenia rozwiązania. Co może być nie tak?Dodano nową klasę do mojego projektu i otrzymałem komunikat o błędzie, że Program.Main() ma więcej niż jeden wpis, dlaczego?

W Form1 nie mam jeszcze żadnego kodu.

Wystarczy dodaje nową klasę:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using OpenHardwareMonitor.Hardware; 

namespace OpenHardwareMonitorReport 
{ 

    class Program 
    { 

     static void Main(string[] args) 
     { 
      Computer computer = new Computer(); 
      computer.Open(); 

      var temps = new List<decimal>(); 
      foreach (var hardware in computer.Hardware) 
      { 
       if (hardware.HardwareType != HardwareType.CPU) 
        continue; 
       hardware.Update(); 
       foreach (var sensor in hardware.Sensors) 
       { 
        if (sensor.SensorType != SensorType.Temperature) 
        { 
         if (sensor.Value != null) 
          temps.Add((decimal)sensor.Value); 
        } 
       } 
      } 

      foreach (decimal temp in temps) 
      { 
       Console.WriteLine(temp); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

Wtedy widzę Program.cs i błąd na main()

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Windows.Forms; 

namespace NvidiaTemp 
{ 
    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()); 
     } 
    } 
} 

Error 2 Program 'D:\C-Sharp\NvidiaTemp\NvidiaTemp\NvidiaTemp\obj\x86\Debug\NvidiaTemp.exe' has more than one entry point defined: 'NvidiaTemp.Program.Main()'. Compile with /main to specify the type that contains the entry point. D:\C-Sharp\NvidiaTemp\NvidiaTemp\NvidiaTemp\Program.cs 14 21 NvidiaTemp 
+1

Masz teraz dwa 'Main'. –

+0

Dzięki ustalonej tnx. – user1544479

Odpowiedz

10

A C# Program może mieć tylko jeden Program.Main(). Główna jest pierwszą metodą uruchamianą podczas uruchamiania programu, więc kompilator musi wiedzieć, który z nich jest prawdziwy, i nie może, jeśli masz dwa.

Wygląda na to, że tworzysz aplikację Windows. Powinieneś albo dodać kod do istniejącej głównej, albo dodać ją do obsługi zdarzeń uruchamianej przez główny formularz.

5

Program .NET powinien mieć tylko jedenstatycznego Main metody.

Masz dwa, a kompilator nie wie, którego użyć.

Zmień nazwę wklejony jeden, chyba że chcesz to być punktem wyjścia do zastosowania (w tym przypadku, zmiana nazwy drugiego), lub skompilować aplikację przechodzącego za pomocą przełącznika /main określającą który metod Main używać.

Zobacz Main() and Command-Line Arguments (C# Programming Guide) na MSDN więcej szczegółów:

Główną metodą jest punktem wyjścia z konsoli aplikacji C# lub aplikacji Windows. (Biblioteki i usługi nie wymagają głównej metody jako punktu wejścia). Po uruchomieniu aplikacji metoda główna jest pierwszą wywołaną metodą.

Istnieje tylko jeden punkt wejścia w programie C#. Jeśli masz więcej niż jedną klasę, która ma metodę Main, musisz skompilować swój program za pomocą opcji/main compiler, aby określić, która metoda główna ma być używana jako punkt wejścia. Aby uzyskać więcej informacji, zobacz/main (C# Opcje kompilatora).

(Kopalnia nacisk)

1

Masz dwie główne metody, dlatego pojawia się ten błąd.

Od MSDN - Main Method

Nie może być tylko jeden punkt wejścia w programie C#. Jeśli masz więcej niż jedną klasę, która ma główną metodę, musisz skompilować swój program z opcją kompilatora/main, aby określić, która metoda główna ma być używana jako punkt wejściowy jako .

9

Inni wskazali, że masz dwie statyczne pustki Główne metody.Są do tego dwie proste rzeczy, jedna oczywista i jedna, która jeszcze nie została wyraźnie wymieniona:

  1. Zmień nazwę na dowolną inną, np. Main1, NotMain, itp.
  2. Aby ustawić opcję głównego kompilatora wymienioną przez @Habib, kliknij prawym przyciskiem myszy węzeł projektu w oknie Solution Explorer, wybierz Właściwości, aw sekcji Aplikacja wybierz "Obiekt startowy" z menu rozwijanego.

Dzięki rozwiązaniu 2 można mieć identyczne podpisy Main(string[] args) w różnych klasach bez komplikowania.

+3

w końcu ktoś wskazał, jak dostosować '/ main' używając Visual Studio (... kto poważnie kompiluje swoje projekty C# w linii poleceń?) – mmcrae

1

Jeśli błąd został naprawiony, a program Visual Studio nadal wyświetla komunikat o błędzie, warto usunąć foldery wyjściowe (domyślnie "bin" i "obj"), a następnie ponownie utworzyć projekt. W moim przypadku po prostu kliknięcie "przebuduj" nie pomogło.

Powiązane problemy