.NET CLIツールを利用してC#プロジェクトをビルド・実行する
前回のレッスンで作成したHelloWorldフォルダの親ディレクトリであるC:\csdemoに戻ります。
新しいフォルダーを作成します。コマンドはmkdir HelloWorld2です。右クリックメニューから手動で新規フォルダを作成することもできますし、
続いてコマンドラインからcd HelloWorld2を実行し、作成したフォルダに移動します
下記コマンドを実行して、完全に新しいコンソールアプリを作成します。consoleは.NET CLIに標準搭載されたアプリ生成用テンプレート名です:
dotnet new consoleCode language: JavaScript (javascript)
C:\csdemo>mkdir HelloWorld
C:\csdemo>cd HelloWorld
C:\csdemo\HelloWorld>cd ..
C:\csdemo>mkdir HelloWorld2
C:\csdemo>cd HelloWorld2
C:\csdemo\HelloWorld2>dotnet new console
テンプレート「コンソールアプリ」が正常に作成されました。
作成後アクションを処理中...
C:\csdemo\HelloWorld2\HelloWorld2.csprojの復元を実行中:
復元に成功しました。Code language: JavaScript (javascript)
補足:.NET CLIには多種のプロジェクトテンプレートが用意されており、ASP.NET Webサイト、Windows FormsのGUIデスクトップアプリなど各種プロジェクトを作成可能です。
プロジェクト作成完了後、フォルダを開くと下記ファイルが確認できます

ターミナルでdirコマンドを実行すると、フォルダ内の全ファイルを一覧表示できます
ディレクトリ内にファイル3つとフォルダ1つが新たに生成されているのが確認できます
- プロジェクトファイル:
HelloWorld2.csproj - C#ソースコードファイル:
Program.cs - フォルダ:
obj(コンパイル設定、キャッシュなど.NETのビルド・実行に必要なデータを格納)
メモ帳でHelloWorld2.csprojを開きます
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
Code language: HTML, XML (xml)

私のPCには.NET 10もインストール済みのため、新規作成するプロジェクトは既定でnet10.0を対象フレームワークとします
Program.csを開くと、既定の雛形コードが記述されています
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");Code language: JavaScript (javascript)
プログラムをコンパイル・実行するには、下記コマンドを実行します
dotnet run

実行に成功すると、コンソールにテキストが出力されます:Hello World!
プログラミング経験のある読者の中には疑問を抱く方もいるかもしれません。プログラムのエントリーポイントはMain関数だと聞いたのに、ここに見当たらないのは何故でしょうか。
これは.NETの新機能「トップレベルステートメント(Main不要)」というC#の糖衣構文です。簡素なコードを記述する場面ではコンパイラが自動的に隠しMainエントリーポイントを生成するため、冗長な雛形コードを省略できます
上記コードの完全な記述は下記の通りです:
using System;
namespace HelloWorld2
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}Code language: JavaScript (javascript)

再度dotnet runコマンドを実行します

コードは問題なくコンパイル・実行されます。
<Project Sdk="Microsoft.NET.Sdk">:新形式の.NET SDKプロジェクトフォーマットを使用することを宣言
<OutputType>Exe</OutputType>:プロジェクトのビルド成果物が実行可能ファイルであることを指定(コンソールアプリ必須の設定)
<TargetFramework>net10.0</TargetFramework>:プロジェクトが.NET 10.0フレームワーク上で動作するよう指定
// 標準で用意されたSystem名前空間をインポート。ConsoleクラスはSystem配下に存在する
using System;
// プロジェクト固有の名前空間HelloWorld2を定義。複数プロジェクト・クラスの名前衝突を防ぐ
namespace HelloWorld2
{
// アプリケーションのメインクラス。.NETコンソールテンプレートでは既定でProgramと命名される
class Program
{
/// <summary>
/// C#プログラム唯一のエントリーメソッド。アプリ起動時に自動実行される
/// static:静的メソッド。Programクラスをインスタンス化せず直接呼び出し可能
/// void:戻り値なし。プログラム終了時にOSへデータを返さない
/// string[] args:文字列配列。アプリ起動時に渡されるコマンドライン引数を受け取る
/// </summary>
static void Main(string[] args)
{
// Console.WriteLine():コンソールにテキストを出力するメソッド
// WriteLineはテキスト出力後に自動で改行を挿入
// "Hello World!" がターミナル画面に出力する文字列
Console.WriteLine("Hello World!");
}
}
}Code language: JavaScript (javascript)

先頭の1行でSystem名前空間を読み込むことで、配下のクラスをコード内でSystem接頭辞なしで利用できます。インポートしない場合は完全修飾クラス名を記述する必要があります。
上記のConsole.WriteLineにおいて、Consoleがクラス名、WriteLineがメソッド名となります。図の右上部分を参照してください。