问题是,在我添加新类之后,当我构建解决方案时出现了错误.有什么不对?
在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方法.有两个简单的解决方案,一个明显,一个尚未具体提到:
Main1,NotMain等等.使用解决方案2,您可以Main(string[] args)在不同的类中使用相同的签名,而无需编译器抱怨.
DGH*_*DGH 13
AC#程序只能有一个Program.Main().Main是程序启动时运行的第一个方法,因此编译器需要知道哪一个是真实的,如果你有两个则不能.
看起来你正在制作一个Windows应用程序.您应该将代码添加到现有main,或者将其添加到由主窗体触发的事件处理程序中.
Bil*_*ell 12
有两个Main方法就好了。如果您收到您提到的错误,那么您只需告诉 Visual Studio 您想使用哪个。
这是一个示例,其中我有两个入口点,具体取决于我想如何开发测试程序集。
将Xunit测试类添加到.NET Core 2.1项目后,我遇到了此问题。
以下文章对WHY进行了详细说明,并提供了对我有用的答案- 在此处。
基本上,编译器会自动Main为新类生成一个。您可以在.csproj文件中提供指令,以防止这种情况发生:
<GenerateProgramFile>false</GenerateProgramFile>
将此添加到您的<PropertyGroup>部分并重新编译。
小智 7
StartupObject可以通过添加到 .cspoj 中来选择入口点
<StartupObject>MyApplication.Core.Program</StartupObject>
Run Code Online (Sandbox Code Playgroud)
.NET程序应该只有一个静态Main方法.
你有两个,编译器不知道使用哪一个.
重命名粘贴一个,除非你想它是入口点的应用程序(在该情况下,重命名等),或编译使用传递应用/main开关指定其中的Main使用方法.
有关更多详细信息,请参阅MSDN上的Main()和命令行参数(C#编程指南):
Main方法是C#控制台应用程序或Windows应用程序的入口点.(库和服务不需要Main方法作为入口点.).启动应用程序时,Main方法是第一个被调用的方法.
C#程序中只能有一个入口点.如果您有多个具有Main方法的类,则必须使用/ main编译器选项编译程序,以指定要用作入口点的Main方法.有关更多信息,请参阅/ main(C#编译器选项).
(强调我的)
您有两个 Main 方法,这就是您收到此错误的原因。
C# 程序中只能有一个入口点。如果您有多个具有 Main 方法的类,则必须使用 /main 编译器选项来编译您的程序,以指定使用哪个 Main 方法作为入口点。
| 归档时间: |
|
| 查看次数: |
44610 次 |
| 最近记录: |