.NET Core CLIは.NET Core SDKで提供されるコマンドラインツールで、ソースコードの生成やコンパイルなどをdotnet
で始まるコマンドで実行できるものです。.NET Coreはクロスプラットフォーム開発を前提とする環境であるため、Windows上であってもデフォルトでは.NET Frameworkで提供されるクラスの一部を利用できません。
ですが.NET Framework環境が事前に整っていれば、それを利用するよう設定できます。それには、dotnet new
コマンドを実行するときに--target-framework-override ターゲットフレームワーク
というオプションを設定して、ターゲットフレームワークを変更します。
dotnet new console --target-framework-override net471 -lang f# -o net471app
こうするとプロジェクトファイル(*.fsproj)の<TargetFramework>
の部分がオプションで設定された値に変更され、ビルド(コンパイル)もその環境で行われます。これにより、以下のような画像ファイルを扱うプログラムも開発できます。このプログラムはデフォルトのターゲットフレームワーク(.NET Core)でビルドしようとしても失敗します。
[<EntryPoint>]
let main argv =
if argv.Length < 1
then printfn "dotnet run -- 画像ファイル名"
else
let file = argv.[0] // コマンドライン引数から画像ファイル名を得る
let image = System.Drawing.Image.FromFile file // 画像ファイルから画像オブジェクト生成
printfn "%s: Width = %d, Height = %d"
file image.Size.Width image.Size.Height // 画像のサイズを表示
0
(* 結果
dotnet new console --target-framework-override net471 -lang f# -o net471app
cd net471app
... Program.fsを編集 ...
dotnet run -- image.jpg
image.jpg: Width = 1920, Height = 1080
*)
さきほどのdotnet new
コマンドで生成されたプロジェクトファイル(*.fsproj)はこのようになります。dllの参照などは適宜追加してください。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<!-- dotnet new --target-framework-overrideオプションで変更可 -->
<TargetFramework>net471</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
</Project>
もしVisual Studioを使えなくてもWindows上に.NET Core CLI(dotnetコマンド)、.NET Framework環境、テキストエディタがあればWindowsアプリを開発できます。これは盲点でした。