在我的项目中添加了一个新类并得到错误说Program.Main()有多个条目为什么?

时间:2012-07-31 19:41:01

标签: c#

问题是,在我添加新类之后,当我构建解决方案时出现了错误。什么可能是错的?

在Form1中我还没有任何代码。

刚刚添加了新课程:

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

然后我在Main()

上看到Program.cs和错误
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

9 个答案:

答案 0 :(得分:14)

其他人已经指出你有两个静态void Main方法。对此有两个简单的解决方法,一个是显而易见的,另一个尚未明确提及:

  1. 将其重命名为其他内容,例如: Main1NotMain
  2. 要设置@Habib提到的/ main编译器选项,只需在解决方案资源管理器中右键单击项目节点,选择“属性”,然后在“应用程序”部分中选择下拉列表中的“启动对象”。
  3. 使用解决方案2,您可以在不同的类中使用相同的Main(string[] args)签名,而不会让编译器抱怨。

答案 1 :(得分:11)

C#程序只能有一个Program.Main()。 Main是程序启动时运行的第一个方法,因此编译器需要知道哪一个是真实的,如果你有两个,它就不能运行。

看起来您正在制作Windows应用程序。您应该将代码添加到现有main,或者将其添加到由主窗体触发的事件处理程序中。

答案 2 :(得分:5)

.NET程序应该只有一个静态Main方法。

你有两个,编译器不知道使用哪一个。

重命名粘贴的,除非您希望 it 成为应用程序的入口点(在这种情况下,重命名另一个),或使用/main开关编译传递的应用程序指定要使用的Main方法

有关详细信息,请参阅MSDN上的Main() and Command-Line Arguments (C# Programming Guide)

  

Main方法是C#控制台应用程序或Windows应用程序的入口点。 (库和服务不需要Main方法作为入口点。)。启动应用程序时,Main方法是第一个被调用的方法。

     

C#程序中只能有一个入口点。如果您有多个具有Main方法的类,则必须使用/ main编译器选项编译程序以指定哪个Main用作入口点的方法。有关更多信息,请参阅/ main(C#编译器选项)。

(强调我的)

答案 3 :(得分:2)

您有两种主要方法,这就是您收到此错误的原因。

来自MSDN - Main Method

  

C#程序中只能有一个入口点。如果你有更多   与一个具有Main方法的类,您必须编译您的程序   使用/ main编译器选项指定要使用的Main方法   切入点。

答案 4 :(得分:2)

在我的.NET Core 2.1项目中添加Xunit测试类后,我遇到了这个问题。

以下文章详细介绍了WHY,并提供了对我有用的答案-here

基本上,编译器会自动为新类生成一个Main。您可以在.csproj文件中提供指令,以防止这种情况的发生:

<GenerateProgramFile>false</GenerateProgramFile>

将此添加到您的<PropertyGroup>部分并重新编译。

答案 5 :(得分:2)

当您在项目中添加新类并编写 Main 方法时,当您在那时运行代码时,它会显示错误,例如“找到多个Main方法”,那么您只需要:

  1. 右键单击“解决方案资源管理器”中显示的项目名称,然后
  2. 进入 Application ,然后在 Startup object 下拉菜单中选择要运行的类。如果您在其中找不到您的类名称,则只需重新启动您的IDE,然后再次执行上述步骤即可。

答案 6 :(得分:1)

如果您已修复错误并且Visual Studio仍然提供错误消息,则删除输出文件夹(默认为“bin”和“obj”)然后重建项目是值得的。在我的情况下,只需点击“重建”就无济于事。

答案 7 :(得分:1)

拥有两个Main方法就可以了。如果收到提到的错误,则只需告诉VS您要使用哪个。

  1. 右键单击您的项目以查看属性。
  2. 转到“应用程序”选项卡,然后从“启动对象”下拉菜单中选择所需的入口点。

这是一个示例,其中有两个入口点,具体取决于我要如何对程序集进行开发测试。

enter image description here

enter image description here enter image description here

答案 8 :(得分:0)

可以通过在您的.cspoj中添加var badgeTimer = document.querySelector('.vsm-badge-timer'); let reacid=badgeTimer.dataset['reacid']; 来选择一个入口点

StartupObject

请参见-main (C# Compiler Options)