LoginSignup
10
15

More than 5 years have passed since last update.

.NET Core CLIだけどWindows上なら.NET Framework使いたいよね!

Posted at

.NET Core CLI.NET Core SDKで提供されるコマンドラインツールで、ソースコードの生成やコンパイルなどをdotnetで始まるコマンドで実行できるものです。.NET Coreはクロスプラットフォーム開発を前提とする環境であるため、Windows上であってもデフォルトでは.NET Frameworkで提供されるクラスの一部を利用できません。

ですが.NET Framework環境が事前に整っていれば、それを利用するよう設定できます。それには、dotnet newコマンドを実行するときに--target-framework-override ターゲットフレームワークというオプションを設定して、ターゲットフレームワークを変更します。

ターゲットフレームワークの変更例(.NETFramework4.7.1)
dotnet new console --target-framework-override net471 -lang f# -o net471app

こうするとプロジェクトファイル(*.fsproj)の<TargetFramework>の部分がオプションで設定された値に変更され、ビルド(コンパイル)もその環境で行われます。これにより、以下のような画像ファイルを扱うプログラムも開発できます。このプログラムはデフォルトのターゲットフレームワーク(.NET Core)でビルドしようとしても失敗します。

.NETCoreCLIで画像ファイルを扱うプログラムを開発(Program.fs)
[<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の参照などは適宜追加してください。

上のプログラムのプロジェクトファイル(net471app.fsproj)
<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アプリを開発できます。これは盲点でした。

10
15
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
10
15