2012-07-31 34 views
7

Vấn đề là sau khi tôi thêm lớp mới, lỗi xuất hiện khi tôi đã xây dựng giải pháp. Điều gì có thể sai?Đã thêm một lớp mới vào dự án của tôi và nhận được lỗi nói Program.Main() có nhiều hơn thì một mục nhập tại sao?

Trong Form1 tôi chưa có mã nào.

Chỉ cần thêm lớp mới:

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

Sau đó, tôi thấy Program.cs và lỗi trên 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

Bây giờ bạn có hai 'Main'. –

+0

Cảm ơn tnx cố định. – user1544479

Trả lời

10

Một chương trình C# chỉ có thể có một Program.Main(). Chính là phương thức đầu tiên chạy khi chương trình bắt đầu, do đó trình biên dịch cần biết cái nào là cái thực, và nó không thể nếu bạn có hai.

Dường như bạn đang tạo ứng dụng Windows. Bạn nên thêm mã vào chính hiện có hoặc thêm mã vào trình xử lý sự kiện được kích hoạt bởi biểu mẫu chính của bạn.

5

Một chương trình .NET nên chỉ có một tĩnh Main phương pháp.

Bạn có hai trình biên dịch và trình biên dịch không biết sử dụng cái nào.

Đổi tên dán một, trừ khi bạn muốn là điểm mấu chốt để các ứng dụng (trong trường hợp này, đổi tên khác), hoặc biên dịch các ứng dụng đi sử dụng /main tắc xác định của Main phương pháp để sử dụng.

Xem Main() and Command-Line Arguments (C# Programming Guide) trên MSDN để xem chi tiết hơn:

Phương pháp chính là điểm mấu chốt của một C# giao diện điều khiển ứng dụng hoặc cửa sổ ứng dụng. (Thư viện và dịch vụ không yêu cầu phương thức chính làm điểm vào). Khi ứng dụng được khởi động, phương thức Main là phương thức đầu tiên được gọi.

Chỉ có thể có một điểm vào trong chương trình C#. Nếu bạn có nhiều hơn một lớp có một phương pháp chính, bạn phải biên dịch chương trình của bạn với tùy chọn trình biên dịch/chính để xác định phương thức chính nào để sử dụng làm điểm vào. Để biết thêm thông tin, xem/main (C# Compiler Options).

(tôi nhấn mạnh)

1

Bạn có hai phương pháp chính, đó là lý do bạn nhận được lỗi này.

Từ MSDN - Main Method

Chỉ có thể có một điểm vào trong một chương trình C#. Nếu bạn có hơn hơn một lớp có phương thức chính, bạn phải biên dịch chương trình bằng tùy chọn trình biên dịch chính/để chỉ định phương thức chính nào sử dụng làm điểm vào.

9

Những người khác đã chỉ ra rằng bạn có hai phương pháp chính trống.Có hai bản sửa lỗi dễ dàng cho điều này, một rõ ràng và chưa được đề cập cụ thể:

  1. Đổi tên một thành bất kỳ điều gì khác, ví dụ: Main1, NotMain, v.v.
  2. Để đặt tùy chọn trình biên dịch chính/được đề cập bởi @Habib, chỉ cần nhấp chuột phải vào nút dự án trong Solution Explorer, chọn Thuộc tính và trong phần Ứng dụng, chọn "Đối tượng khởi động" trong trình đơn thả xuống.

Với giải pháp 2, bạn có thể có chữ ký Main(string[] args) giống hệt nhau trong các lớp khác nhau mà không có trình biên dịch rên rỉ.

+3

cuối cùng ai đó đã chỉ ra cách điều chỉnh '/ main' bằng cách sử dụng Visual Studio (... ai đang biên soạn các dự án C# của họ ở dòng lệnh?) – mmcrae

1

Nếu bạn đã sửa lỗi và Visual Studio vẫn cung cấp cho bạn thông báo lỗi, bạn nên xóa thư mục đầu ra (theo mặc định "bin" và "obj") rồi xây dựng lại dự án. Trong trường hợp của tôi chỉ cần nhấp vào "xây dựng lại" đã không giúp đỡ.

Các vấn đề liên quan