问题是,在我添加新类之后,当我构建解决方案时出现了错误。什么可能是错的?
在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
答案 0 :(得分:14)
其他人已经指出你有两个静态void Main方法。对此有两个简单的解决方法,一个是显而易见的,另一个尚未明确提及:
Main1
,NotMain
等使用解决方案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)
您有两种主要方法,这就是您收到此错误的原因。
C#程序中只能有一个入口点。如果你有更多 与一个具有Main方法的类,您必须编译您的程序 使用/ main编译器选项指定要使用的Main方法 切入点。
答案 4 :(得分:2)
在我的.NET Core 2.1项目中添加Xunit测试类后,我遇到了这个问题。
以下文章详细介绍了WHY,并提供了对我有用的答案-here。
基本上,编译器会自动为新类生成一个Main
。您可以在.csproj文件中提供指令,以防止这种情况的发生:
<GenerateProgramFile>false</GenerateProgramFile>
将此添加到您的<PropertyGroup>
部分并重新编译。
答案 5 :(得分:2)
当您在项目中添加新类并编写 Main 方法时,当您在那时运行代码时,它会显示错误,例如“找到多个Main方法”,那么您只需要:
答案 6 :(得分:1)
如果您已修复错误并且Visual Studio仍然提供错误消息,则删除输出文件夹(默认为“bin”和“obj”)然后重建项目是值得的。在我的情况下,只需点击“重建”就无济于事。
答案 7 :(得分:1)
拥有两个Main方法就可以了。如果收到提到的错误,则只需告诉VS您要使用哪个。
这是一个示例,其中有两个入口点,具体取决于我要如何对程序集进行开发测试。
答案 8 :(得分:0)
可以通过在您的.cspoj中添加var badgeTimer = document.querySelector('.vsm-badge-timer');
let reacid=badgeTimer.dataset['reacid'];
来选择一个入口点
StartupObject