2019年に取り組んでみようと考えた言語がC#だ。先日の三連休中、初心者向けの本を3冊読んだ。これまでの経験を前提に、C#は非常に馴染みやすさを感じた。「なぜもっと早くに取り組まなかった!?」と思うほどだった。
C#に限らず、初心者向けのサンプル・コードと言えばコンソール向けのものだ。C#の開発環境と言えば、事実上Visual Studioなのだが、コンソール向けの開発には重厚過ぎるように感じる。VSCodeにもC#拡張が提供されておりコーディング可能なのだが、Visual Studioと異なり基盤は.NET Coreだ。.Net frameworkではない。
コンソール向けのコードに基づいた練習に.NET Coreが不足なわけではない。とはいえMessageBoxのような、お馴染みのWindows Formに由来するものが利用できないのは、少し勿体ないように思う。
一連のエントリではVSCodeから.NET Frameworkを利用するための手続きについて紹介する。このエントリでは2を取り上げる。
事前準備
.NET Frameworkを利用するとはいえ、.NET Coreは必要だ。またVSCode用のC#拡張もインストールしておく。このエントリの記述は、次の環境に基づいている。
VSCode | 1.30.2 |
.NET Core | 2.2.102 |
.NET Framework | 4.6.2 |
コンソール・アプリケーションの開発準備
VSCodeを起動したら、VSCode内のコンソールから次のコマンドを実行する。
dotnet new console --target-framework-override <TFM> -lang c# -o <folder name>
<TFM>には、目的の.NET Frameworkのターゲットフレームワークを指定する。私は「net462」とした。目的のバージョンとTFMは、次のサイトで確認することができる。
<folder name>はVisual Studioで開発する場合のプロジェクト名に該当する。カレント・フォルダに指定した名前のフォルダ名が作成される。私は「msgbox」とした。
docs.microsoft.com
プロジェクト・ファイルの編集
コマンドを実行すると必要なフォルダ、ファイルが自動生成される。次のファイルが生成されていることを確認する。
プロジェクト・ファイル | msgbox.csproj |
ソースコード | Program.cs |
Visual Studioでコンソール・アプリケーションを開発するとき、
using System.Windows.Forms
と記述するだけでは「アセンブリの参照がない」と警告され、MessageBoxが利用できなかった経験はないだろうか。VisualStudioでは参照設定を変更するのだが、VSCodeでもプロジェクト・ファイルを編集して同様の対応をしなければならない。
「using」で参照するコンポーネントは、プロジェクト・ファイル内でもReferenceタグで指定する必要がある。ここではItemGroupタグに続く一連の記述だ。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net462</TargetFramework> </PropertyGroup> <ItemGroup> <Reference Include="System.Windows.Forms" /> </ItemGroup> </Project>
ソースコードの編集
自動生成されたソースコードを編集する。ソースコードを編集するとき、Windows.Formクラスが参照できていることが確認できる。もちろんMessageBoxも参照可能だ。
今回の検証では、次のコードで完成とした。
using System; using System.Windows.Forms; namespace msgbox { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); MessageBox.Show("!! Hello World !!"); } } }
デバッグ実行
デバッグ実行に際し、次の2ファイルの作成を求められると思う。
launch.jsonの次の箇所を編集する。2行存在していることに注意。
"program": "${workspaceFolder}/bin/Debug/<insert-target-framework-here>/<insert-project-name-here>.dll",
Visual Studio同様、フォルダ構成は左ペインのエクスプローラを参照すると良い。
このエントリでは次のように置き換えた。
<insert-target-framework-here> | net462 |
<insert-project-name-here>.dll | msgbox.exe |
tasks.jsの生成に際し、テンプレートを選択する。選ぶのは「.NET Core」だ。MSBuildではない。
生成されたtask.jsonは、何も編集しない。
改めてデバッグを実行すると、コンソールにテキスト表示されると同時に、メッセージボックスも表示される。