2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ASP.NET Core のチュートリアルをやってみた

Posted at

はじめに

自宅のWindowsマシンにIISとSQLServer2014ExpressをインストールしてASP.NETのアプリを稼働させていただものの、

そのマシンが再三の電源断(エアコン&電子レンジ&トースターコンボによるブレーカー落ち)に見舞われ、システムのロールバックが発生。

結果、データは残ったものの環境が綺麗さっぱりなくなりました。

ということで、さくらのクラウドクーポンもあるし、クラウドへ移行することに決め、

.NET Core, ASP.NET Core をやってみようとまずはチュートリアルをやってみてそれを記録していきます。

途中まで順調だったものの、開発環境(Windows)から実行環境に(CentOS)に乗せて実行した時にトライ&エラーがありました。


環境等

開発環境

  1. Windows 10 Home 64Bit

  2. Visual Studio Community 2015

  3. Git(SourceTree)

実行環境

  1. さくらのクラウド(1CPU,1GB,20GB HDD)

  2. CentOS 7.2 64Bit

  3. .Net Core環境は構築済み

    1. DotNetCoreのインストール オフィシャル

    2. ASP.NetCoreのプロジェクト作成 オフィシャル


チュートリアル開始

オフィシャルのチュートリアルに沿って進めます。
開発環境のVisual Studio Community 2015でやります。

  1. まずはプロジェクトの作成と起動

    Getting started with ASP.NET Core MVC and Visual Studio

    1. ASP.NET Core Web Application(.NET Core)の新規プロジェクト作成

    2. そしていきなりCtrl+F5で起動!

    3. 何事もなく表示される

  2. 次。Controller

    Adding a controller

    1. Controllerクラスを追加

    2. メソッドを2つ追加。Index,Welcome

      1. Indexはデフォルト参照される

      2. WelcomeはPath指定したら参照される

      3. よくあるやつ /[Controller]/[ActionName]/[Parameters]

    3. で、その定義がStartup.csに定義されてますよってことみたい

      1. template: "{controller=Home}/{action=Index}/{id?}"); で指定

      2. ASP.NETと同じです

    4. Welcome()にパラメータ追加しましょう

    5. … チュートリアルの内容を進めているだけなので、特に書くことない …

実行環境(CentOS)で動かしてみる

画面が表示される状態になってちょっとだけ修正したので、CentOS上にリリースして動かしてみましょう!
ということでここからは、さくらのクラウドで稼働しているCentOSでやります。

  1. 実行してみる

    1. dotnet restore 問題なし。

    2. dotnet run コケた。

      $ dotnet run
      Project helloAspDotNetWebApp (.NETCoreApp,Version=v1.0) will be compiled because the version or bitness of the CLI changed since the last build
      Compiling helloAspDotNetWebApp for .NETCoreApp,Version=v1.0

      Compilation succeeded.
      0 Warning(s)
      0 Error(s)

      Time elapsed 00:00:02.5178875

      The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found.

      • Check application dependencies and target a framework version installed at:
        /opt/dotnet/shared/Microsoft.NETCore.App
      • The following versions are installed:
        1.1.0
      • Alternatively, install the framework version '1.0.1'.

      どうやら、Microsoft.NETCore.Appの開発環境と実行環境バージョンが一致してないらしい。
      実行環境は1.1.0らしいので開発環境をバージョンアップしなければ。

    3. VisualStudioのNuGetパッケージマネージャから更新

      1. ほんとだ、現在は1.0.1だ… さっき作ったのになんで最新じゃないんだっけ

      2. とりあえず開発環境のNuGetパッケージマネージャで更新

    4. 更新できたのでLinux側で再チャレンジ

      1. dotnet restore

      2. dotnet run …コケた…

        $ dotnet run
        Can not find runtime target for framework '.NETCoreApp,Version=v1.0' compatible with one of the target runtimes: 'centos.7-x64'. Possible causes:

        1. The project has not been restored or restore failed - run dotnet restore
        2. The project does not list one of 'centos.7-x64' in the 'runtimes' section.
        3. You may be trying to publish a library, which is not supported. Use dotnet pack to distribute libraries.

        これは… うーん、ターゲットランタイムはcentos.7-x64と互換ないっすよ。と… .NET Core なのに互換ないとかなんてことだ!

        とりあえず開発環境ですべてのNuGetパッケージを更新してみる。全部で3回更新してやっと全部更新完了。

        で、再チャンレジしたけどダメ…

        1. ググってたらこんな情報見つけた。

          C# で AWS Lambda を使う

          ランタイムに centos.7-x64 と指定すると発行ができるようになります。

          dotnet publish --configuration Release --runtime centos.7-x64

          ん~、だめ。

           ※ 動いたあとでよく見たらちゃんと`project.json`にruntimeブロックが追記されていました。ちゃんと読まなきゃだめですね…
          
        2. さらにこんな情報を見つけた。

          In my project.json I added the following section:

          project.json にruntimeセクション追加して、そこでcentos.7-x64を指定しろ。

          ってことなんだけど、これは上でやっていることとほとんど同じだからダメだろ… と思ってやってみたら、キタコレ!

          これで起動するということはランタイム指定ができていれば良いということ。

          つまり、dotnetコマンドのruntimeオプションが効いてない?

        3. dotnetコマンドのリファレンス確認

          dotnet-run

          これによると、--runtimeっていうオプションは記載されてない。

          でも、コマンド実行した時にエラーにならないの?試しに…

          dotnet run -hoge

          dotnet run --hoge

          hogeパラメータは完全に無視されて普通に動いた…

          やっぱり、オプションによるruntime指定はできない。project.jsonのruntimeセクションで指定する必要がある。が正解みたいだ。

          下記がproject.jsonに追記した内容。

          "runtimes": {
            "centos.7-x64": { }
          }
          

今日はここまで!続きはまた今度!

2
5
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
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?