.NETCoreのコードはportable?
.NETCoreで書いたコードは、ちゃんと確認してないんだけれど、WindowsでもMacでも、dotnet run
すれば動くんだと思う。Javaのbyte code がportableであるように。
project.jsonにもそう書いてある。
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
もしものすごく便利なアプリを書いたらどうする?
例えば、万人にとって便利なアプリを.NETCoreのフレームワークを使って書いたとして、ソレを配布するにはどうする?「まず、.NETCoreをインストールしてください」とは言いにくい。
Javaで言えば、Javaのアプリを使う人全員がjavaのSDKをインストールするワケじゃない。Windowsで言えば、.exeを作りたい。
方法はないだろうか?と思ったら、そういうドキュメントがあった。
.NET Core Application Deployment
project.jsonを編集する。
まず、"type": "platform",
の行を消して、以下の項目を追加する。
"runtimes": {
"osx.10.12-x64": { }
}
というワケで、修正したproject.jsonはこんな感じ。
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {},
"frameworks": {
"netcoreapp1.1": {
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.1.0"
}
},
"imports": "dnxcore50"
}
},
"runtimes":{
"osx.10.12-x64": { }
}
}
restore と build と publish
後は、dotnet restore
して、dotnet build
して、dotnet publish
する。
dotnet restore
には、そこそこ時間がかかる。
dotnet run
ではなく、コマンドとして起動できるようになった。んだけれど、ちょっと釈然としない。
% ./bin/Debug/netcoreapp1.1/osx.10.12-x64/hello
Hello world.
ちなみに、これを実行するためのランタイムだと思うんだけれど、122 個もの.dllファイルができていた。別のマシンにコピーする時は、これまるごとコピーするんですかね。
Windowsでいう.exeができるのを期待してたんだけどな。