Technically Impossible

Lets look at the weak link in your statement. Anything "Technically Impossible" basically means we haven't figured out how yet.

VSCodeで.NET Frameworkを利用する。-"--target-framework-override"オプションの紹介

2019年に取り組んでみようと考えた言語がC#だ。先日の三連休中、初心者向けの本を3冊読んだ。これまでの経験を前提に、C#は非常に馴染みやすさを感じた。「なぜもっと早くに取り組まなかった!?」と思うほどだった。

C#に限らず、初心者向けのサンプル・コードと言えばコンソール向けのものだ。C#の開発環境と言えば、事実上Visual Studioなのだが、コンソール向けの開発には重厚過ぎるように感じる。VSCodeにもC#拡張が提供されておりコーディング可能なのだが、Visual Studioと異なり基盤は.NET Coreだ。.Net frameworkではない。
コンソール向けのコードに基づいた練習に.NET Coreが不足なわけではない。とはいえMessageBoxのような、お馴染みのWindows Formに由来するものが利用できないのは、少し勿体ないように思う。

一連のエントリではVSCodeから.NET Frameworkを利用するための手続きについて紹介する。このエントリでは1を取り上げる。

  1. 前置きとして"--target-framework-override"の紹介
  2. .NET Framework利用のための手続き

.NET Frameworkを利用するにあたり、dotnetコマンドのオプションを用いる。それが「--target-framework-override」だ。これは隠しオプションでdotnetコマンドのレファレンスでは紹介されていないし、コマンドのヘルプにも含まれていない。
docs.microsoft.com

MicrosoftのMike Lorbetske、Maira Wenzelなどを交えた、このオプションに関する議論と問い合わせがGitHubに掲載されている。その代表的な投稿が、次の2つだ。
github.com
github.com
ここでのポイントは、

  • "--target-framework-override"に限らず、そもそも"-f"、"--framework"でさえ、レファレンスにもヘルプにも含まれていない。
  • このオプションはVisutal Studio 2017でも、特定条件下で使用している。
  • とはいえ使用を推奨するものではない。
  • オプションは利用可能としながらも、その使用が推奨、あるいは一般利用されないことを意識して、現在の形で提供している。

※筆者注:"-f"、"--framework"オプションはビルドのためのもので、dotnet buildコマンドのレファレンス、ヘルプに収録されている。

このような事情のオプションであるため、少なくとも.NET Coreで用が足りる人には不要なオプションだ。このオプションを必要とするのは、次のようなケースだろう。

  • Windows Formのような.NET Franeworkに依存したコンポーネントを利用する。
  • .NET Core環境に対応していないリソースへのアクセス。例えば.NET CoreがインストールされていないOracleサーバへの接続にまつわる開発。

特に後者は「素直にVisual Studioを利用せよ」と言いたくなるシナリオだろうが、.NET Frameworkを利用すべき何らかの事情がありながらも、VSCodeを利用したい気持ちがあるのが共通点だ。そして、それは対応可能だ。

次のエントリーで、.NET Frameworkを用いるデバッグ実行までの一連の手続きを紹介する。
impsbl.hatenablog.jp