概要
.NET6でWinFormsアプリケーションを作ろうとしたらusingが無い!?
となったので調べたことのメモ。
環境
IDE: Visual Studio 2022
プロジェクトテンプレート: Windows フォームアプリ
フレームワーク: .NET6.0 (長期的なサポート)
調べた結果
生成されたForm1.csファイルは以下の通りでした。
Formクラスを継承しているのにも関わらず、usingディレクティブにSystem.Windows.Formsが見当たりません。
namespace WinFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
調べると公式のドキュメントに以下の記述がありました。
.NET 6 以降、暗黙的な global using ディレクティブが新しい C# プロジェクトに追加されます。
これは、完全修飾名を指定したり、using ディレクティブを手動で追加したりしなくても、
これらの名前空間で定義された型を使用できることを意味します。
また、
ImplicitUsings プロパティを使用すると、.NET 6 以降のバージョンと C# 10 以降のバージョンをターゲットとする C# プロジェクトで、暗黙的な global using ディレクティブを有効または無効にすることができます。 この機能を有効にすると、.NET SDK により、既定の名前空間セットに対して、プロジェクト SDK の種類に基づいて global using ディレクティブが追加されます。 暗黙的な global using ディレクティブを有効にするには、このプロパティを true または enable に設定します。 暗黙的な global using ディレクティブを無効にするには、このプロパティを削除するか、false または disable に設定します。
生成された.csprojを見ると、上記のImplicitUsingsプロパティがenableに設定されていました。
このおかげで記述しなくても暗黙的にusingディレクティブが有効になっているようでした。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
また、暗黙的に追加される既定の名前空間は使用しているSDKによって決定されます。
Windowsフォームアプリでは、Microsoft.NET.Sdk の
- System
- System.Collections.Generic
- System.IO
- System.Linq
- System.Net.Http
- System.Threading
- System.Threading.Tasks
と、Microsoft.NET.Sdk.WindowsDesktop (Windows Forms) の
- System.Drawing
- System.Windows.Forms
が追加されています。
既定の名前空間の追加や削除は、.csprojファイルに以下のように記述することで可能です。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<Using Include="System.Text.Json"/>
<Using Remove="System.Net.Http"/>
</ItemGroup>
</Project>
VisualStudioで.csprojファイルを右クリック→プロパティからも可能なようです。
所感
既定の名前空間は記述不要になり、便利になりました。
少し違和感は感じますが、使っているうちに慣れるでしょうか。。笑
参考
この記事は以下の情報を参考にして執筆しました。