はじめに
2021年11月 Microsoft社より「.NET6」が長期サポート(LTS)としてリリースされました。
「.NET Core」と同じようにWindowsはもとより、LinuxやMAC OSなどマルチプラットフォームで動作可能です。
また、同時に今までLTSであった「.NET Core 3.1」が2022年12月にサポート終了とのことで、これを機会に「.NET6」への移行を検討していきたいと思います。
コンソールアプリで検証
前提として「.NET6」を利用するにあたり「Visual Studio 2022」もインストールします。
プロジェクトの作成
まずは、コンソールアプリケーション プロジェクトを作成します。
- Visual Studioを起動し、「ファイル」->「新規作成」->「プロジェクト」
- 「コンソールアプリ」を選択し「次へ」
- プロジェクト名、場所、ソリューション名を入力し「次へ」
- 「フレームワーク」で「.NET 6.0 (長期的なサポート)」を選択し「作成」
プロジェクトの作成が完了すると、新しいテンプレートでのコードが作成されます。
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
こちらは「最上位レベルのステートメント」、「暗黙的な using ディレクティブ」、「グローバルの using ディレクティブ」がテンプレートに採用されており、その効果によって、コードが簡略化(using、クラス、Mainメソッド等の簡略化)されています。それぞれについて、簡単に紹介していこうと思います。
最上位レベルのステートメント
今まではMainメソッドを明示的に含める必要がありましたが、C# 9以降では、Mainメソッドを記載する必要がなり、コンパイラーが自動で、クラスとMainメソッドエントリーポイントを生成してくれます。
ここで困るのは、非同期(async/await)や起動引数(args)そして、プロセスの終了コード(return値)となるのですが、それぞれ、意識せずに利用可能です。
// await
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
// args
if (args.Length > 0)
{
foreach (var arg in args)
{
Console.WriteLine($"Argument={arg}");
}
}
else
{
Console.WriteLine("No arguments");
}
// プロセスの終了コード
return 0
つまり、こんな関係性でコンパイル時に自動で解析してくれます。
最上位レベルのステートメント | 暗黙的なMainメソッドのシグネチャ |
---|---|
await 及び return | static async Task<int> Main(string[] args) |
await | static async Task Main(string[] args) |
return | static int Main(string[] args) |
await 及び returnなし | static void Main(string[] args) |
但し、この機能を利用したくない場合は、一旦フレームワークを「.NET 5」でプロジェクトを作成し、csporjを以下のように書き換えることで通常通りに「.NET 6」で実装できます。
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework> <!-- ここを 下のようにnet6.0に書き換えます-->
</PropertyGroup>
暗黙的な using ディレクティブ
プロジェクトの種類に基づいて「using ディレクティブ」が自動的に追加されます。コンソールアプリの場合は、以下のディレクティブが暗黙的に追加されます。そのため、明示的にusingで指定せずに利用することが可能です。
- using System;
- using System.IO;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net.Http;
- using System.Threading;
- using System.Threading.Tasks;
この機能を削除する場合は、csprojで「ImplicitUsings」を「disable」に設定します。
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
グローバルの using ディレクティブ
プロジェクト全体に暗黙的なusingを追加したり削除する際に記載します。
具体的にはcsprojに以下を追加します。
<ItemGroup>
<Using Include="System.text" /> <!-- 追加 -->
<Using Remove="System.Net.Http" /> <!-- 削除 -->
</ItemGroup>
終わりに
簡単に書けるようになったね。で終わらずに内部の仕組みを簡単に調べてみました。
まだ触れていませんが、NULL許容コンテキストやアプリケーションの設定ファイルの読み込みなども次回に試していきます。