2016年12月8日木曜日

[C#].Net Core時代のHello world

.Net Standard周りをいじっていたら新たに追加されたdotnetツールを使ってみるかということで色々と触ってみました。

.Net CoreはdjangoやrailsみたいなフレームワークをASP.NETで実現したようなものです。
なので、コマンドライン上でプロジェクト作成からビルド・実行までdotnetコマンドを使うことでできます。

このdotnetコマンドは、Consoleアプリ、WEBアプリ、ライブラリの3つ作れるようなので全部試してみました。


-------------------
console編
-------------------

 mkdir helloworld
 cd helloworld
 dotnet new
 dotnet restore
 dotnet run

必要時間:1分
結果:画面上にhello worldと表示される。


-------------------
asp.net編
-------------------
mkdir helloasp
cd helloasp
dotnet new -t Web
dotnet restore
dotnet run
ブラウザ上で[http://localhost:5000]を開く。


所要時間:1分+エラー対応
結果:webアプリの作り方のページが表示される。


注意:
 Restoreでエラーがでました。
 project.jsonを開いてNugetライブラリのバージョンを上げてみると良いようです。
 """
  例:Microsoft.AspNetCore.Razor.Tools 1.0.0-preview2-final
  でエラーが起きたら
  1.0.0-preview4-final にする。
 """


メモ:neinxサーバを使う場合の設定
server {
  listen 80;
  server_name example.local;
  location / {
    proxy_pass http://localhost:5000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection keep-alive;
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}


-------------------
library編
-------------------
 mkdir hellolib
 cd hellolib
 dotnet new -t lib
 dotnet restore
 dotnet build

所要時間:1分+エラー対応
結果:dotnet run すると Mainがないので当然動きません。


これもエラーが出てうまく行きません。
project.jsonを開き、runtimesを追加してどのプラットフォーム向けにビルドするかを決めなければなりません。
"""
{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable"
  },
  "dependencies": {},
  "frameworks": {
    "netstandard1.6": {
      "dependencies": {
        "NETStandard.Library": "1.6.1"
      }
    }
  },
  "runtimes" : {
    "win10-x64" : {}
  }
}
"""


メモ:
○nugetパッケージ化する方法
 dotnet pack


○Consoleアプリで参照する方法
 project.jsonに記述する。

-------------------


所感:
 いろんなサイトを見ると今後のアップデートでjson設定ファイルがなくなってcsprojになるとか
パッケージ類もまだpreviewだし、2017年春リリース予定の.Net Standard 2.0で大幅な更新があったりするので実用レベルになるまで注視するのが良いのではないでしょうか。

もし.Net Standard 2.0が出ても大幅な更新=長期間のバグフィックス期間が予想されるので、
バグフィックスが進んで3.0の噂が出始める頃が始めるタイミングとして一番いいと思います。
(現状だと.Net Standardで用意されてるインターフェイスが少ない上にOS依存部分・通信周り・ファイル入出力がほぼ未実装)


参考
 http://qiita.com/creativewebjp/items/48ede6a3f920ba26ff59

コメントを投稿

Androider