Main
という名前のメソッドを持つ型が複数ある場合はコンパイルエラーとなります。 この場合、コンパイラオプション/main、またはプロジェクトファイルのプロパティ<StartupObject>
によって、どの型のMainメソッドをエントリポイントとするか指定することができます。 /main
, <StartupObject>
では、Mainメソッドを持つ型を名前空間.型名
の形式で指定します。
複数のMainメソッドが存在する場合にエントリポイントとなるメソッドを指定する
using System;
namespace NS {
class EntryPoint {
static void Main() // このMainメソッドをエントリポイントとしたい
{
Console.WriteLine("Hello, entry point!");
}
}
}
class Sample {
static void Main() // このMainメソッドはエントリポイントとしては使用しない
{
Console.WriteLine("Hello, sample!");
}
}
複数のMainメソッドがある場合
test.cs(5,17): error CS0017: プログラムで複数のエントリ ポイントが定義されています。エントリ ポイントを含む型を指定するには、/main でコンパイルしてください。 [sample.csproj]
プロジェクトファイルのStartupObjectでエントリポイントとしたいMainメソッドを持つ型を指定する
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5</TargetFramework>
<StartupObject>NS.EntryPoint</StartupObject> <!-- エントリポイントとしたいMainメソッドを持つ型を指定する -->
</PropertyGroup>
</Project>
実行結果
$dotnet run
Hello, entry point!
複数のMainメソッドがある場合
>csc /nologo test.cs && test.exe
test.cs(5,17): error CS0017: プログラムで複数のエントリ ポイントが定義されています。エントリ ポイントを含む型を指定する には、/main でコンパイルしてください。
/mainによってエントリポイントとしたいMainメソッドを持つ型を指定する
>csc /nologo /main:NS.EntryPoint test.cs && test.exe
Hello, entry point!
複数のMainメソッドがある場合
$mcs test.cs
test.cs(5,17): error CS0017: Program `test.exe' has more than one entry point defined: `NS.EntryPoint.Main()'
test.cs(13,15): error CS0017: Program `test.exe' has more than one entry point defined: `Sample.Main()'
Compilation failed: 2 error(s), 0 warnings
/mainによってエントリポイントとしたいMainメソッドを持つ型を指定する
$mcs /main:NS.EntryPoint test.cs && mono test.exe
Hello, entry point!
IDE上でもエントリポイントをコンパイルオプションとして変更することができます。 またIDE上では、MainメソッドではなくフォームをWindowsアプリケーションのエントリポイントとして指定する場合もあります。