38

問題は、新しいクラスを追加した後、ソリューションをビルドしたときにエラーが発生したことです。何が間違っている可能性がありますか?

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

次に、ファイルProgram.csと 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
4

9 に答える 9

53

xUnitテスト クラスを .NET Core 2.1 プロジェクトに追加した後、この問題が発生しました。

次の記事では、その理由の詳細な説明と、私にとって有効な回答を提供しています

基本的に、コンパイラMainは新しいクラスの を自動的に生成します。.csproj ファイルにディレクティブを指定して、これが起こらないようにすることができます。

<GenerateProgramFile>false</GenerateProgramFile>

<PropertyGroup>これをセクションに追加して再コンパイルします。

于 2019-01-24T15:17:12.070 に答える
27

他の人は、2 つの static void Main メソッドがあることを指摘しています。これには 2 つの簡単な修正方法があります。1 つは明白で、もう 1 つはまだ具体的に言及されていません。

  1. Main1NotMainなどの名前に変更します。
  2. Habib で言及されている/mainコンパイラ オプションを設定するには、ソリューション エクスプローラーでプロジェクト ノードを右クリックし、[プロパティ] を選択し、[アプリケーション] セクションでドロップダウンから [スタートアップ オブジェクト] を選択します。

解決策 2 を使用すると、コンパイラが泣き言を言うことなく、異なるクラスで同一Main(string[] args)の署名を使用できます。

于 2013-08-14T21:48:07.610 に答える
20

AC#プログラムは、Program.Main()を1つだけ持つことができます。Mainは、プログラムの起動時に実行される最初のメソッドであるため、コンパイラーはどちらが実際のメソッドであるかを知る必要があり、2つある場合は知ることができません。

Windowsアプリケーションを作成しているようです。既存のメインにコードを追加するか、メインフォームによってトリガーされるイベントハンドラーにコードを追加する必要があります。

于 2012-07-31T19:46:07.503 に答える
9

.NETプログラムには、静的メソッドを1つだけ含める必要があります。Main

2つあり、コンパイラはどちらを使用するかを認識していません。

アプリケーションへのエントリポイントにする場合を除いて、貼り付けたものの名前変更するか(この場合、もう一方の名前を変更します)、使用するメソッドを指定する/mainスイッチを使用して、渡されるアプリケーションをコンパイルします。Main

詳細については、MSDNのMain()およびコマンドライン引数(C#プログラミングガイド)を参照してください。

Mainメソッドは、C#コンソールアプリケーションまたはWindowsアプリケーションのエントリポイントです。(ライブラリとサービスは、エントリポイントとしてMainメソッドを必要としません。)アプリケーションが起動すると、Mainメソッドが最初に呼び出されます。

C#プログラムにはエントリポイントが1つだけ存在できます。Mainメソッドを持つクラスが複数ある場合は、/ mainコンパイラオプションを使用してプログラムをコンパイルし、エントリポイントとして使用するMainメソッドを指定する必要があります。詳細については、/ main(C#コンパイラオプション)を参照してください。

(強調鉱山)

于 2012-07-31T19:44:12.323 に答える
4

2つのメインメソッドがあり、それがこのエラーが発生する理由です。

MSDNから-主な方法

C#プログラムにはエントリポイントが1つだけ存在できます。Mainメソッドを持つクラスが複数ある場合は、/ mainコンパイラオプションを使用してプログラムをコンパイルし、エントリポイントとして使用するMainメソッドを指定する必要があります。

于 2012-07-31T19:46:09.390 に答える
2

エラーを修正しても Visual Studio からエラー メッセージが表示される場合は、出力フォルダー (既定では "bin" と "obj") を削除してから、プロジェクトを再構築することをお勧めします。私の場合、「再構築」をクリックするだけでは役に立ちませんでした。

于 2018-02-20T11:30:10.827 に答える