.NET 5(C#9.0)を試してみた

2020/11/10 (日本時間11日 1:00)に、.NET 5が正式リリースされたそうなので試してみました。

# .NET 5のインストール手順
## Visual Studio 2019のインストール/アップデート
.NET 5をVisual Studioで扱う場合は、Visual Studio 2019 Version 16.8以降が必要とのことなので、
まずはアップデートを行います。
インストールがまだの場合は、最新のVisual Studioをインストールしましょう。
[Download Visual Studio 2019 for Windows & Mac](https://visualstudio.microsoft.com/ja/downloads/)

既にインストールされている場合は、Visual Studio Installerを起動し、更新ボタンをクリック
![update.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/23b15aed-4373-78cf-e194-737c8be6bf97.png)


または、Visual Studioの [ヘルプ] -> [更新プログラムの確認] で更新します。
![check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/9612f06f-2343-7903-d4f0-07f5cd688a16.png)

アップデートが完了したら、 [ヘルプ] -> [Microsoft Visual Studio のバージョン情報] とクリック
![version.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/f70f5422-f76e-e090-d56e-6da4ad7dfd67.png)


現在のバージョンが確認できます。
![nowver.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/8c4e2614-b201-2cbd-610b-5bb87a6f7184.png)


## .NET 5をインストール
いよいよ.NET 5のインストールです。
まず、[ダウンロードページ](https://dotnet.microsoft.com/download/dotnet/5.0)にて、.NET 5のSDKインストーラをダウンロードします。
(種類がいろいろあるので、自分の使ってる端末にあったものをダウンロードします。)
ダウンロードが完了したら、インストーラを起動し、インストールボタンをクリック
![install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/73c7b69c-7527-d0ea-497a-3cf07e81b52a.png)
しばらく待つと、インストール完了の旨が表示されます。
![インストール完了](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/97853011-3fa3-a870-fb5e-94243a41bcd9.png)
これで、.NET 5の環境が整いました。
意外と簡単だった。

# .NET 5(C#9.0)を使ってみる
さっそく新規プロジェクトを作って使ってみようと思います。
## コンソールアプリの作成
とりあえずコンソールからやりたいと思います。
新しいプロジェクトの作成から、```コンソール アプリ (.NET Core)```を選択[^1]して、次へのボタンをクリック
適当なプロジェクト名を決め、作成ボタンをクリック
仮に、「Dotnet5Test」としました。
![proj.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/b6b8f56d-ac09-cb6a-3203-52ecd421ab24.png)

プロジェクトを作成したら、まずは、プロジェクトのプロパティを開きます。
![プロパティ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/19566774-ef3a-65ab-196d-641585c4a46d.png)


対象のフレームワークを、.NET 5に変更します。
![フレームワークの変更](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/fa6509b5-5b26-5821-a7cf-9dd8f176a5e4.png)


これで.NET 5が使えるようになったので、さっそくコードを書いていきましょう。
個人的に目玉なのが、トップレベルステートメントというのが追加されたそうなので、試してみたいと思います。
最初に出力された```Program.cs```のコードは、全てコメントアウトにします。
![コメントアウト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/f5f4eded-13ff-aa07-3cbd-f1dedd83a7e2.png)
そしたら、1行だけ書きます。

```cs
System.Console.WriteLine("Hello World!");
```

えっメインメソッドとかコメントアウトしたけど実行できるの？
![HelloWorld](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/782c24fd-38bc-bdac-babe-937a005225a7.png)
できちゃいました:relaxed:[^2]
トップレベルステートメントというのは、メインメソッド相当のを自動生成してくれるらしいです。
なのでいきなり標準出力の処理を書いても、勝手にメインクラスとして認識してくれるというわけですね。
(なんか感動)
ちなみに以下のコードを実行すると...

```cs
using System;

Console.WriteLine("外側からHello World!");

namespace Dotnet5Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("内側からHello World!");
        }
    }
}
```

![soto.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/0cc80b07-b292-27b0-a8c7-72f96568278c.png)


こうなります。
Mainメソッドは無視されるようです。(たしか警告が出てたような...)
他の機能を試したい場合は、以下を参照してください。
[What's new in .NET 5](https://docs.microsoft.com/ja-jp/dotnet/core/dotnet-five)　(英語)
[C# 9.0 の新機能](https://ufcpp.net/study/csharp/cheatsheet/ap_ver9/) (日本語)


## Windows Formsの作成
今度はFormsアプリを作ってみます。
Windows Forms App (.NET)で作成(dotnet5Formsで作成しました。)
![FormsProj](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/7c938b99-c999-0031-61e6-7937acb0451e.png)
プロジェクトを作成したら、先程と同じように、プロパティから、対象のフレームワークを.NET 5に変更します。
すると、Formsの場合、以下のような警告が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/64002e5c-93c2-b539-99aa-58c62f5ef839.png)

```
警告	NETSDK1137	Microsoft.NET.Sdk.WindowsDesktop SDK を使用する必要はなくなりました。ルート プロジェクト要素の SDK 属性を 'Microsoft.NET.Sdk' に変更することをご検討ください。
```

検討してくださいとのことなので、.csprojのProject要素のSdk属性を、Microsoft.NET.Sdkに変更します。
(1行目のところ)
ビルドすると警告が消えるのでそのまま実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/95f297e8-db84-0f9d-1299-090ebf8f93b7.png)
この通り、普通に実行させることができました。

# VS Code(コマンド)でプロジェクト作成/実行
.NET 5をインストールすると、```dotnet```というコマンドが使えるようになっています。

```
dotnet --version
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/2c1a9eb9-20af-cdab-2772-15fea7f12563.png)
なので、コマンドでプロジェクトを作って、実行ができます。

```:プロジェクト作成
dotnet new console -o Dotnet5Test
```

```:実行
dotnet run
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176021/b9676321-041a-f926-434b-88e8ca6eb584.png)

# 感想
* .NET 5のインストールが以外と簡単だった。
* コンソールアプリに関しては、.NET 5だと入門しやすい、とっつきやすいのかなと思った。

# 参考サイト
* [C#9.0の新機能 | ++C++; // 未確認飛行 C](https://ufcpp.net/study/csharp/cheatsheet/ap_ver9/)
* [.NET5とVisual Studio2019のダウンロード、インストール | イメージングソリューション](https://imagingsolution.net/program/visualstudio2019v167p1/)




[^1]: .NET 5のテンプレートプロジェクトがないようなので、今回は.NET Coreを選択しました。.NET 5のテンプレートを表示する方法ってあるのかな？
[^2]: 予め、[ツール] -> [オプション] -> [デバッグ] -> [デバッグの停止時に自 動的にコンソールを閉じる] のチェックを外す。