LoginSignup
4
3

More than 1 year has passed since last update.

.NET6を使ってみた1

Last updated at Posted at 2021-12-27

はじめに

2021年11月 Microsoft社より「.NET6」が長期サポート(LTS)としてリリースされました。
「.NET Core」と同じようにWindowsはもとより、LinuxやMAC OSなどマルチプラットフォームで動作可能です。
また、同時に今までLTSであった「.NET Core 3.1」が2022年12月にサポート終了とのことで、これを機会に「.NET6」への移行を検討していきたいと思います。

コンソールアプリで検証

前提として「.NET6」を利用するにあたり「Visual Studio 2022」もインストールします。

プロジェクトの作成

まずは、コンソールアプリケーション プロジェクトを作成します。

  1. Visual Studioを起動し、「ファイル」->「新規作成」->「プロジェクト」
  2. 「コンソールアプリ」を選択し「次へ」
  3. プロジェクト名、場所、ソリューション名を入力し「次へ」
  4. 「フレームワーク」で「.NET 6.0 (長期的なサポート)」を選択し「作成」 image.png

プロジェクトの作成が完了すると、新しいテンプレートでのコードが作成されます。

// 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許容コンテキストやアプリケーションの設定ファイルの読み込みなども次回に試していきます。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3