rksoftware

Visual Studio とか C# とかが好きです

C# 12 を試す - .NET Preview 編

そろそろ C# 12 の時期なので予習を始めなければなりません。

というわけで公式サイトを見てみると .NET 8 SDK のプレビュー版か Visual Studio の Preview 版で試せるとのこと。

learn.microsoft.com

偶然、PC に .NET の Preview 版が入っていたので試してみました。

.NET の確認

> dotnet --version
8.0.100-preview.7.23376.3

■ プロジェクトの新規作成

普通にプロジェクトを新規作成します。

> dotnet new console -n ConsoleAppNetPreview

■ 出来上がった .csproj

普通の .csproj が出来上がります。

> cat .\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>

■ C# 12 のプログラム

このプロジェクトに C# 12 のコードを書いてみます。

> cat .\ConsoleAppNetPreview\Program.cs
// See https://aka.ms/new-console-template for more information
Console.WriteLine(new Test("Hello, World!").Name());


class Test(string name)
{
    public string Name() { return name; }
}

■ ビルド - 失敗

で、ビルドすると失敗します。

> dotnet build .\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj
MSBuild のバージョン 17.8.0-preview-23367-03+0ff2a83e9 (.NET)
  復元対象のプロジェクトを決定しています...
  復元対象のすべてのプロジェクトは最新です。
C:\Program Files\dotnet\sdk\8.0.100-preview.7.23376.3\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(314,5): message NETSDK1057: プレビュー版の .NET を使用しています。https://aka.ms/dotnet-support-policy をご覧ください [C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj]
C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\Program.cs(5,11): error CS8652: 機能 'プライマリ コンストラクター' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。 [C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj]

ビルドに失敗しました。

C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\Program.cs(5,11): error CS8652: 機能 'プライマリ コンストラクター' は現在、プレビュー段階であり、*サポートされていません*。プレビュー機能を使用するには、'preview' 言語バージョンを使用してください。 [C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj]
    0 個の警告
    1 エラー

経過時間 00:00:0X.XX

■ 'preview' 言語バージョンを使用する

おこられたとおりに、'preview' 言語バージョンを使用するように .csproj を書き換えます。
次の要素を追加します。

<LangVersion>Preview</LangVersion>
> cat .\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <LangVersion>Preview</LangVersion>
  </PropertyGroup>

</Project>

■ もう一度ビルド

もう一度ビルドします。

> dotnet build .\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj
MSBuild のバージョン 17.8.0-preview-23367-03+0ff2a83e9 (.NET)
  復元対象のプロジェクトを決定しています...
  復元対象のすべてのプロジェクトは最新です。
C:\Program Files\dotnet\sdk\8.0.100-preview.7.23376.3\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInference.targets(314,5): message NETSDK1057: プレビュー版の .NET を使用しています。https://aka.ms/dotnet-support-policy をご覧ください [C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj]
  ConsoleAppNetPreview -> C:\XXXXXXXX\ConsoleAppNetPreview\ConsoleAppNetPreview\bin\Debug\net8.0\ConsoleAppNetPreview.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:0X.XX

成功しました。

■ 実行

実行します。

> dotnet run --project .\ConsoleAppNetPreview\ConsoleAppNetPreview.csproj
Hello, World!

計算通り! 実行できました。これで C# 12 を試せます。