2
1

More than 1 year has passed since last update.

.NET6 usingディレクティブはどこ?

Posted at

概要

.NET6でWinFormsアプリケーションを作ろうとしたらusingが無い!?
となったので調べたことのメモ。

環境

IDE: Visual Studio 2022
プロジェクトテンプレート: Windows フォームアプリ
フレームワーク: .NET6.0 (長期的なサポート)

調べた結果

生成されたForm1.csファイルは以下の通りでした。
Formクラスを継承しているのにも関わらず、usingディレクティブにSystem.Windows.Formsが見当たりません。

Form1.cs
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ディレクティブが有効になっているようでした。

WinFormsApp1.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>

</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ファイルに以下のように記述することで可能です。

WinFormsApp1.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ファイルを右クリック→プロパティからも可能なようです。

image.png

所感

既定の名前空間は記述不要になり、便利になりました。
少し違和感は感じますが、使っているうちに慣れるでしょうか。。笑

参考

この記事は以下の情報を参考にして執筆しました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1