Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9747

.NET6を使ってみた1

$
0
0
はじめに 2021年11月 Microsoft社より「.NET6」が長期サポート(LTS)としてリリースされました。 「.NET Core」と同じようにWindowsはもとより、LinuxやMAC OSなどマルチプラットフォームで動作可能です。 また、同時に今までLTSであった「.NET Core 3.1」が2022年12月にサポート終了とのことで、これを機会に「.NET6」への移行を検討していきたいと思います。 参考:.NET および .NET Core サポート ポリシー コンソールアプリで検証 前提として「.NET6」を利用するにあたり「Visual Studio 2022」もインストールします。 参考: 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許容コンテキストやアプリケーションの設定ファイルの読み込みなども次回に試していきます。

Viewing all articles
Browse latest Browse all 9747

Trending Articles