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

use*_*479 15 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在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
Run Code Online (Sandbox Code Playgroud)

Pau*_*ith 17

其他人指出你有两个静态void Main方法.有两个简单的解决方案,一个明显,一个尚未具体提到:

  1. 重命名一个别的例如Main1,NotMain等等.
  2. 要设置@Habib提到的/ main编译器选项,只需在解决方案资源管理器中右键单击项目节点,选择"属性",然后在"应用程序"部分中选择下拉列表中的"启动对象".

使用解决方案2,您可以Main(string[] args)在不同的类中使用相同的签名,而无需编译器抱怨.

  • 最后有人指出如何使用Visual Studio调整`/ main`(...谁在命令行认真编译他们的C#项目?) (5认同)

DGH*_*DGH 13

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

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


Bil*_*ell 12

有两个Main方法就好了。如果您收到您提到的错误,那么您只需告诉 Visual Studio 您想使用哪个。

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

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

在此处输入图片说明

在此处输入图片说明 在此处输入图片说明


Jes*_*e Q 9

将Xunit测试类添加到.NET Core 2.1项目后,我遇到了此问题。

以下文章对WHY进行了详细说明,并提供了对我有用的答案- 在此处

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

<GenerateProgramFile>false</GenerateProgramFile>

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

  • 保存了这一天:) (2认同)
  • 当我添加 NuGet 包“Microsoft.NET.Test.Sdk”时,我发生了这种情况 (2认同)
  • 这应该是公认的答案。 (2认同)

小智 7

StartupObject可以通过添加到 .cspoj 中来选择入口点

<StartupObject>MyApplication.Core.Program</StartupObject>
Run Code Online (Sandbox Code Playgroud)

请参阅-main(C# 编译器选项)


Ode*_*ded 6

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

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

重命名粘贴一个,除非你想是入口点的应用程序(在该情况下,重命名等),或编译使用传递应用/main开关指定其中Main使用方法.

有关更多详细信息,请参阅MSDN上的Main()和命令行参数(C#编程指南):

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

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

(强调我的)


Hab*_*bib 6

您有两个 Main 方法,这就是您收到此错误的原因。

来自MSDN - 主要方法

C# 程序中只能有一个入口点。如果您有多个具有 Main 方法的类,则必须使用 /main 编译器选项来编译您的程序,以指定使用哪个 Main 方法作为入口点。