最近出来心でコマンドラインツールを作ろうと思ってgo言語を勉強してました・・・が,go言語はあまりにも構文が貧弱であれもないこれもないとやりながらストレスたまりまくって心が折れました.で,仕方なく色々言語をあさって,古巣のC#はそういえばどうなってるんだろうと見てみたところ,.NET Core3.0のPreview版が出てるとのこと.さらには.NET Core3.0ではPublishSingleFile12がサポートされるとのことでテンションが上がって試して見ることにしました.
#環境準備
まずはこちらからSDKをインストール.開発環境は次の3つから選択することができます(2019/6/14現在,Preview6)
- 任意のエディタ+コマンドライン
- VisualStudio2019 リリース版(別途設定が必要)
- VisualStudio2019 プレビュー版
私はリリース版のVisualStudio2019で試しました.VisualStudio2017は現在サポートされていないようです.リリース版になればサポートされる可能性があるかもしれません.
VS2019リリース版の追加設定
デフォルトの状態では,対象のフレームワークとしてプレビュー版のフレームワークを指定することができないので,プレビュー版も選択肢に追加する設定が別途必要です.
- ツール > オプション から,オプション設定画面を開く
- 環境 > プレビュー機能 のページを開く
- .NETコアSDKのプレビューを使用する にチェックを入れる
HelloWorldを表示するプログラムを作ってみる
以降,VisualStudio以外ではやり方調べられてないです.
まずは,普通に.NET Coreでコンソールアプリを作成します.コンソールアプリを作成すると,VisualStudioのテンプレートでHelloWorldのプログラムが生成されます.プログラムが生成されたら,ソリューションエクスプローラから作成したプロジェクトを右クリックし,プロジェクトのプロパティを開きます.プロジェクトのプロパティ画面が開けたら,下図のように対象のフレームワークを.NET Core 3.0に変更します.
メニューバーからプロジェクトファイルの編集をクリックし,下記のようにPublishSingleFileとRuntimeIdentifierを追記します.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win10-x64</RuntimeIdentifier>
</PropertyGroup>
</Project>
publishの構成を変更します.メニューバーのビルドからプロジェクトの発行をクリックし,プロファイルを作成します.編集から,プロファイルの設定を開き,配置モードを「自己完結」,ターゲットランタイムを実行したい環境に設定し,保存します.
あとは,同じ画面の発行ボタンをクリックしたらターゲットの場所で指定したフォルダにファイルが出力されています.
あとがき
とりあえずこれでシングルファイルのアプリケーションが.NET Coreで作成することができました.まだpreview版なので,リリース時にどうなるかわかりませんが,3.0ではUtf8Jsonが追加されたり,LinuxのSerialPortを叩けるようになったり,Windows以外にも勢力を広げようと野心的なアップデートがされるようなので今後が楽しみですね.
-
PublishSingleFileは.NET Coreのプログラムの配布を行うときに,実行ファイルを1つにまとめると言う機能です.C#はJava同様にランタイムの上でコードを動かす関係上,プログラムの実行ファイルの他に実行環境も用意して上げる必要があります.そのため.NET Coreでは,ランタイムをプログラムを実行するマシンにインストールしておくか,実行環境とともにプログラムを配布する必要があります. ↩
-
.NET Core2.2以前では,実行環境とともに書き出してしまうと,標準ライブラリも同一ディレクトリにdllファイルとして書き出されてしまうため,実行ファイルが大量のdllファイルに埋もれてしまうという頭の痛い状況でした. ↩