読者です 読者をやめる 読者になる 読者になる

SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

.NET Coreことはじめ

RTMになってからしばらく経ちますが、ちょっとやってみたのでφ(..)メモメモ

.NET Coreというと、ASP.NET Core向けのチュートリアルが多いですが、 ASP.Net Coreを使っていきなりWebサーバーを作ると、多くのファイルが一気にでてきて理解が難しくなりそうです。
そこで、.NET Coreを使ってコンソールアプリを作るところから順に始めたいと思います。

Node.jsを学ぶ際も、最初からexpressを使ったWebサイトの作成とかはせず、普通はNode.jsのコンソールアプリから入門しますよね!!
ということで、今日は.NET CoreのインストールからコンソールでHello Worldまで。

インストール

↓を参考に色々インストールします。

VS2015を使う場合は、Update3をインストール後、.NET Core 1.0.0 VS2015 Tooling Preview2というのをインストールすればOKです。

VSの拡張機能の画面から、以下の項目を選んで更新するか、
f:id:minami_SC:20161020130111p:plain
以下のページのリンクから、「.NET Core 1.0.0 - VS 2015 Tooling Preview 2」というのをインストールしてください。
https://www.microsoft.com/net/core#windows

プロジェクトを作ってみる

以下の二通りの方法で、それぞれプロジェクトを作ってみます。

最初に書いた通り、今回は単純なHello Worldアプリを作るだけです。

Visual Studioで作成

VSから作成する場合は、新規プロジェクト作成のダイアログで、.Net Coreの項目から「Console Application(.NET Core)」という項目を選びプロジェクトを作成します。
f:id:minami_SC:20161020130140p:plain

プロジェクトの構造

出来上がったプロジェクトの中身を見てみます。
こんな構成のプロジェクトになっています。
f:id:minami_SC:20161020130214p:plain

Program.csを開き、Main関数内に以下のようにConsole.WriteLine関数を追加して、Hello World!!という文字列の表示を行います。 Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!!");
        }
    }
}

Ctrl+F5で起動すると、「Hello World!!」が表示されます。
f:id:minami_SC:20161020130241p:plain

コマンドラインで作成

今度はVisual Studioを使わずに、コマンドラインからプロジェクトの作成&実行をしてみます。

dotnetコマンド

先ほどの「.NET Core 1.0.0 VS2015 Tooling Preview2」をインストールすると、dotnetコマンドが使えるようになっています。
Visual Studioは使わない、という場合には、別途「.NET Core SDK for Windows」をインストールしておけば大丈夫かと思います。

まずは、コマンドプロンプトdotnetコマンドを打ってみて、dotnetコマンドが使えるようになっているか確認しておきましょう。
f:id:minami_SC:20161020130306p:plain

VSCodeの拡張機能

VSCodeで編集する場合は、以下の拡張機能をインストールしておきます。
f:id:minami_SC:20161020130319p:plain

プロジェクト作成

プロジェクト用に適当な名前でディレクトリを作成しておきます。
この作成したディレクトリをカレントディレクトリにしてコマンドラインを開き、以下のコマンドを実行します。

dotnet new

すると、以下のようなプロジェクトとの雛形が作成されます。
f:id:minami_SC:20161020130332p:plain

Program.csは、以下のように単純なHelloWorldなコードとなっています。 Program.cs

using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

続いて、依存するアセンブリ類を取得します。
以下のコマンドを実行すればOK!!

dotnet restore

すると、project.lock.jsonというファイルが作成され、依存関係などの情報がすべて書き込まれたファイルが出来上がります。
依存ファイルの依存ファイルの・・・、と再帰的にたどって記録するようなので、結構でっかいファイルが出来上がってます。

Node.js環境でnpmを使うときのshrinkwrap.jsonのような立ち位置のファイルなのかな。

実行方法

以下のコマンドで、コンパイル&実行できます。

dotnet run

f:id:minami_SC:20161020130355p:plain

このとき、bin/Debugフォルダに以下のようなファイル類が出力されます。
デフォルトの設定では、exeファイルではなくdllファイルとして出力されるようです。
f:id:minami_SC:20161020130459p:plain

このdllファイルは、以下のようにdotnetコマンドに引数として渡すことで実行できるようになっています。
f:id:minami_SC:20161020130415p:plain

VSCode用の設定ファイル

先ほど作った雛形プロジェクトをVSCodeで編集していると、以下のようなメッセージが画面上部に表示されています。
f:id:minami_SC:20161020130726p:plain

ここで「Yes」というのを押すと、VSCodeでビルドやデバッグをするためのファイル類が生成されます。
f:id:minami_SC:20161020130508p:plain

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (console)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceRoot}\\bin\\Debug\\netcoreapp1.0\\dotnetcore-test.dll",
            "args": [],
            "cwd": "${workspaceRoot}",
            "externalConsole": false,
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart"
        },
        {
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command.pickProcess}"
        }
    ]
}

tasks.json

{
    "version": "0.1.0",
    "command": "dotnet",
    "isShellCommand": true,
    "args": [],
    "tasks": [
        {
            "taskName": "build",
            "args": [
                "${workspaceRoot}\\project.json"
            ],
            "isBuildCommand": true,
            "problemMatcher": "$msCompile"
        }
    ]
}

これで、Ctrl+F5でビルド&実行したり、F5実行でVSCodeのデバッガでデバッグできるようになります。
f:id:minami_SC:20161020130540p:plain

.NET Coreで使用するproject.jsonについて

以前から少し話題には出てますが、project.jsonやxprojというファイルは今後使わなくなり、csprojに統一されるそうですです。
なので、ここで扱ったファイルのいくつかは、今後のバージョンでは使わなくなっていきます。

しかし、dotnet resotredotnet buildなどなど、基本的なdotnetコマンドの使い方は変わらないようなので、この辺のコマンドは今覚えた知識はそのまま使えるので一安心かと。

この辺の話は、以下のブログ記事に今後の情報が載っています。
https://blogs.msdn.microsoft.com/dotnet/2016/10/19/net-core-tooling-in-visual-studio-15/

今回はここまで。