Visual Studio 2019で.NET 6を使う

.NET 6が2021年11月に正式リリースされました。この.NET 6を正式サポートするVisual StudioはVisual Studio 2022となります。

しかし、開発者よってはVisual Studio 2022のライセンスを持っていない場合もあります。では、Visual Studio 2019では、.NET 6アプリのビルドやデバッグはできないのでしょうか?実際に試してみました。

開発環境の作成

まずは、試すための環境を作成します。

Windows 10をインストール

動作を試すときは、他の影響を排除します。具体的には、他のバージョンのVisual Studioや他のアプリなどがインストールされていることによる影響を排除するために、Windows 10を新規の仮想マシンにインストールします。

Visual Studio 2019のインストール

クリーンなWindows 10の環境を用意したら、Visual Studio 2019をインストールします。今回の目的は、.NET 6が使えるかを試すことであるため、インストール時の設定では、最低限「.NET デスクトップ開発」ワークロードを選択します。

.NET 6 SDKをインストール

Visual Studio 2019のインストーラーでは、.NET Core 3.1や.NET 5を一緒にインストールできます。しかし、サポート外である.NET 6をVisual Studio 2019のインストーラーで一緒にインストールすることはできません。そのため、.NET 6 SDKを別途インストールします。

.NET 6 SDKのインストーラーは以下のリンクからダウンロードできます。

Download .NET 6.0 (Linux, macOS, and Windows) (microsoft.com)

ここから、Windows版の .NET 6.0.x SDK インストーラーをダウンロードしてインストールします。

以上で、Visual Studio 2019上で、.NET 6アプリの開発を試す環境が作成できました。

テスト アプリ プロジェクトの作成

動作の確認のためのアプリ プロジェクトを用意します。プロジェクトテンプレートとしては、WPFアプリケーション (.NET Core WPFアプリケーションを作成するためのプロジェクト) を選択します。ここで作成したWPFアプリケーションプロジェクトで動作確認することになります。

.NET Core (.NET)を使ったアプリは、製品版としてはサポート面の観点からLTS版の.NET Core (.NET)を使うことが多いと思います。そのため、比較対象の元になるターゲットフレームワークは、LTS版である .NET Core 3.1を選択します。

プロジェクトのターゲットフレームワーク変更UI

Visual Studio 2019

Visual Studio 2019での .NET Core 3.1アプリのプロジェクトの設定変更UIを確認します。

.NET Core 3.1アプリのプロジェクトの設定変更UI (Visual Studio 2019)

図を見てわかるように、.NET 5.0へは変更できますが、.NET 6.0には変更できません。Visual Studio 2019は、.NET 6.0を正式サポートしていないため、変更UIは存在しません。

Visual Studio 2022

次にVisual Studio 2022で .NET Core 3.1アプリのプロジェクトの設定変更UIを確認します。

.NET Core 3.1アプリのプロジェクトの設定変更UI (Visual Studio 2022)

図を見てわかるように、Visual Studio 2022は.NET 6.0を正式サポートしているため、.NET 6.0へも変更できます。

Visual Studio 2019では、プロジェクトの設定変更UIからは、.NET 6が使えないことがわかりました。

プロジェクトファイルの編集

Visual Studio 2019のプロジェクトの設定変更UIでは.NET 6が使えないため、別の方法でアプリプロジェクトのターゲットフレームワークを変更する必要があります。

プロジェクトファイルは、XMLドキュメントファイルであるため、プロジェクトの各種設定は、テキストエディターで直接変更することができます。

そこで、プロジェクトファイルを直接編集して、.NET 6アプリプロジェクトへと変更します。

プロジェクトファイルのターゲットフレームワークを.NET 6に変更

作成した.NET Core 3.1のWPFアプリプロジェクトのプロジェクトファイルは、以下のようになっています。

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
</Project>

手動でターゲットフレームワークを変更するには、以下のように書き換えます。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
  </PropertyGroup>
</Project>

変更点は2か所となります。

Project@Sdk

まずは、ルートタグ(Projectタグ)のSdk属性を書き換えます。これは、.NET 5.0から変更になりました。.NET 3.1では、WPFアプリの場合は 「Microsoft.NET.Sdk.WindowsDesktop」 を設定する必要がありますが、.NET 5.0以降では他の.NETアプリと同様に「Microsoft.NET.Sdk」でよくなりました。

TargetFramework

次に、 TargetFrameworkタグ を書き換えます。TargetFrameworkは、.NET Core 3.1までは、 「netcoreapp3.1 」のようにバージョンを表す値のみでした。.NET 5では、「net5.0-windows」のように、前半に.NETのバージョン、後半に対象とするプラットフォームを指定するようになりました。.NET 6でも同様の形式となります。そのため、「net6.0-windows」と設定します。

このように手動で変更したプロジェクトファイルをVisual Studio 2019のプロジェクトの設定変更UIで確認してみます。

.NET 6アプリのプロジェクトの設定変更UI (Visual Studio 2019)

対象のフレームワークは、空白となっていました。やはり、Visual Studio 2019のプロジェクトの設定変更UIでは、.NET 6はサポートされていません。

Visual Studio 2019で.NET 6プロジェクトをビルド

FrameworkTargetを net6.0-windows に変更したプロジェクトをVisual Studio 2019でビルドできるか確認しました。ビルドの結果は以下の通りです。

リビルドを開始しました...
1>------ すべてのリビルド開始: プロジェクト:WpfApp6, 構成: Debug Any CPU ------
C:\repos\WpfApp\WpfApp6\WpfApp6.csproj を復元しました (1 ms)。
1>C:\Program Files\dotnet\sdk\6.0.101\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.targets(134,5): warning NETSDK1182: Visual Studio 2019 で .NET 6.0 をターゲットにすることはサポートされていません。
1>CSC : warning CS8032: アナライザー System.Text.Json.SourceGeneration.JsonSourceGenerator のインスタンスは C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.1\analyzers\dotnet\cs\System.Text.Json.SourceGeneration.dll (ファイルまたはアセンブリ 'Microsoft.CodeAnalysis, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。) から作成できません。
1>WpfApp6 -> C:\repos\WpfApp\WpfApp6\bin\Debug\net6.0-windows\WpfApp6.dll
1>プロジェクト "WpfApp6.csproj" のビルドが終了しました。
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========

警告は出ていますが、ビルドには成功しています。警告の中の一つは、

warning NETSDK1182: Visual Studio 2019 で .NET 6.0 をターゲットにすることはサポートされていません。

となっており、Visual Studio 2019は.NET 6をサポートしていないことが出力されています。

デバッグ実行する

.NET Core 3.1アプリ

比較の為にまずは、.NET 3.1アプリをデバッグ実行します。そして、アプリにロードされているモジュールを確認します。

.NET 3.1アプリに読み込まれているモジュール

すると、読み込まれているモジュールのパスに3.1.22が含まれており、.NET Core 3.1のモジュールを使って実行できていることが確認できます。

.NET 6アプリ

次に、Visual Studio 2019でビルドできた.NET 6アプリをデバッグ実行します。 そして、アプリにロードされているモジュールを確認します。

.NET 6アプリに読み込まれているモジュール

すると、 読み込まれているモジュールのパスに6.0.1が含まれており、.NET 6のモジュールを使って実行できていることが確認できました。

Visual Studio 2019で.NET 6アプリの開発

今回の確認結果から、

  • Visual Studio 2019上で、.NET 6アプリはビルドできること
  • Visual Studio 2019上で、.NET 6アプリをデバッグ実行しても.NET 6モジュールが読み込まれること

が確認できました。

.NET 6を使う場合は、.NET 6を正式サポートしているVisual Studio 2022を使うことが最適です。しかし、Visual Studio 2022のライセンスがすぐに準備できないときなどに、一時的にVisual Studio 2019で.NET 6アプリを開発することができることがわかりました。


以上、今回の投稿は、.NET 6アプリをVisual Studio 2019を使って開発できるのかを確認した結果についてでした。

コメントを残す