2012-07-31 5 views
7

El problema es que después de que agregué la nueva clase, apareció el error cuando construí la solución. Qué puede estar mal ?Agregué una nueva clase a mi proyecto y obtengo un error, digamos Program.Main() tiene más de una entrada ¿por qué?

En Form1 aún no tengo ningún código.

Acaba de añadir nueva clase:

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

entonces veo Program.cs y error en 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

Tiene dos 'Main' ahora. –

+0

Gracias tnx fijo. – user1544479

Respuesta

10

un programa en C# sólo puede tener un Program.Main(). Main es el primer método que se ejecuta cuando se inicia el programa, por lo que el compilador necesita saber cuál es el real, y no si tiene dos.

Parece que está haciendo una aplicación de Windows. Debe agregar código al principal existente o agregarlo a un controlador de eventos activado por su formulario principal.

5

Un programa .NET debe tener solamente uno método estático Main.

Tiene dos, y el compilador no sabe cuál usar.

Cambie el nombre pegado uno, a menos que desee que a ser el punto de entrada a la aplicación (en cuyo caso, cambiar el nombre de la otra), o compilar la aplicación que pasa con el interruptor /main especificando cuales de los métodos Main usar.

Ver Main() and Command-Line Arguments (C# Programming Guide) en MSDN para obtener más detalles:

El método principal es el punto de entrada de una aplicación C# aplicación de consola o ventanas. (Las bibliotecas y los servicios no requieren un método principal como punto de entrada). Cuando se inicia la aplicación, el método Principal es el primer método invocado.

Solo puede haber un punto de entrada en un programa C#. Si tiene más de una clase que tiene un método principal, debe compilar su programa con la opción/compilador principal para especificar qué método principal usar como punto de entrada. Para obtener más información, vea/main (Opciones del compilador C#).

(el énfasis es mío)

1

Tiene dos métodos principales, es por eso que está recibiendo este error.

De MSDN - Main Method

Sólo puede haber un punto de entrada en un programa en C#. Si tiene más que una clase que tiene un método principal, debe compilar su programa con la opción/compilador principal para especificar qué método principal usar como el punto de entrada.

9

Otros han señalado que tiene dos métodos principales vacíos estáticos.Hay dos soluciones fáciles para esto, una obvia y otra que no se ha mencionado específicamente todavía:

  1. Cambiar el nombre de una a otra cosa, p. Main1, NotMain, etc.
  2. Para establecer la opción/compilador principal mencionado por @Habib, simplemente haga clic derecho en el nodo del proyecto en el Explorador de soluciones, seleccione Propiedades y en la sección Aplicación seleccione el "Objeto de inicio" en el menú desplegable.

Con la solución 2, puede tener las mismas firmas Main(string[] args) en diferentes clases sin quejarse el compilador.

+3

finalmente alguien señaló cómo ajustar '/ main' usando Visual Studio (... ¿quién está compilando seriamente sus proyectos de C# en la línea de comandos?) – mmcrae

1

Si ha corregido el error y Visual Studio aún muestra un mensaje de error, vale la pena eliminar las carpetas de salida (por defecto "bin" y "obj") y luego reconstruir el proyecto. En mi caso, simplemente haciendo clic en "reconstruir" no ayudó.

Cuestiones relacionadas