Introduction

2017/04/23現在、**.NET Core 2.0の開発が進められます。
そんな **.NET Core 2.0
Preview を使ってコンソールアプリを作ります。
目標は

  • Visual Studio Codeを使えるようになる
  • .NET Coreを使えるようになる
  • Linuxでビルドして実行

になります。
特にLinuxでの実行が重要になります。
開発環境を広げないと、飯の種が無くなってしまいますので。
今回は準備と作成を。

.NET Core 2.0 Preview

まずは.NET Coreを入手します。
入手先は下記。

上のページで、Installers and Binariesってセクションから環境に応じたものを入手します。
今回は、zipで入手します。Previewなんて先行版をインストーラでインストールしたくありません(キリッ)

これは適当な場所に置いておきます。今回は D:\Works\Lib\Microsoft.NET Core CLI\2.0.0-preview2-005840\bin に展開します。
パスを通すかはお好みで。

Visual Studio Code

入手

ダウンロード先は下記です。以上。

C# Extension

Visual Studio Code起動後、拡張機能を導入します。
C#はMicrosoftにおける第一級のプログラミング言語ですが、Visual Studio Codeは、クロスプラットフォームで動作するので、そのあたりの特別扱いはできなかった、あるいはIDEではなくエディタという位置づけなので、言語対応は全て拡張機能で追加しましょう、なスタンスのご様子。面倒。

コーディング

まず、プロジェクトフォルダを作成します。
Visual Studio Codeでは、プロジェクトという概念がありません。エディタだからですかね。
あるのは、開いたフォルダが起点となるという概念だけです。

今回はD:\Works\temp\corecli をプロジェクトフォルダにします。

プロジェクトの作成は、先ほど入手した.NET Coreを使います。

まず、コマンドラインでプロジェクトフォルダに移動します。
続いて、.NET Coreに含まれる dotnet.exe を–helpをつけて呼び出します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
D:\Works\temp\corecli>"D:\Works\Lib\Microsoft\.NET Core CLI\2.0.0-preview2-005840\bin\dotnet.exe" --help
.NET Command Line Tools (2.0.0-preview2-005840)
Usage: dotnet [host-options] [command] [arguments] [common-options]

Arguments:
[command] The command to execute
[arguments] Arguments to pass to the command
[host-options] Options specific to dotnet (host)
[common-options] Options common to all commands

Common options:
-v|--verbose Enable verbose output
-h|--help Show help

Host options (passed before the command):
-d|--diagnostics Enable diagnostic output
--version Display .NET CLI Version Number
--info Display .NET CLI Info

Commands:
new Initialize .NET projects.
restore Restore dependencies specified in the .NET project.
build Builds a .NET project.
publish Publishes a .NET project for deployment (including the runtime).
run Compiles and immediately executes a .NET project.
test Runs unit tests using the test runner specified in the project.
pack Creates a NuGet package.
migrate Migrates a project.json based project to a msbuild based project.
clean Clean build output(s).
sln Modify solution (SLN) files.

Project modification commands:
add Add items to the project.
remove Remove items from the project.
list List items in the project.

Advanced Commands:
nuget Provides additional NuGet commands.
msbuild Runs Microsoft Build Engine (MSBuild).
vstest Runs Microsoft Test Execution Command Line Tool.

色々ありますが、new でプロジェクトを初期化することがわかります。
ではnewをつけて呼び出します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
D:\Works\temp\corecli>"D:\Works\Lib\Microsoft\.NET Core CLI\2.0.0-preview2-005840\bin\dotnet.exe" new
Template Instantiation Commands for .NET Core CLI

Usage: new [options]

Options:
-h, --help Displays help for this command.
-l, --list Lists templates containing the specified name. If no name is specified, lists all templates.
-n, --name The name for the output being created. If no name is specified, the name of the current directory is used.
-o, --output Location to place the generated output.
-i, --install Installs a source or a template pack.
-u, --uninstall Uninstalls a source or a template pack.
--type Shows a subset of the available templates. Valid values are "project", "item" or "other".
--force Forces content to be generated even if it would change existing files.
-lang, --language Specifies the language of the template to create.

Templates Short Name Language Tags
-----------------------------------------------------------------------
Console Application console [C#], F# Common/Console
Class library classlib [C#], F# Common/Library
Unit Test Project mstest [C#], F# Test/MSTest
xUnit Test Project xunit [C#], F# Test/xUnit
ASP.NET Core Empty web [C#] Web/Empty
ASP.NET Core Web App mvc [C#], F# Web/MVC
ASP.NET Core Web API webapi [C#] Web/WebAPI
Nuget Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution

Examples:
dotnet new mvc --framework netcoreapp2.0 --auth Individual
dotnet new console --framework netcoreapp2.0
dotnet new --help

コンソールアプリは、consoleをつける模様。
最後に、new consoleを付けて実行します。

1
2
3
4
5
6
D:\Works\temp\corecli>"D:\Works\Lib\Microsoft\.NET Core CLI\2.0.0-preview2-005840\bin\dotnet.exe" new console
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on D:\Works\temp\corecli\corecli.csproj...
Restore succeeded.

そうすると、プロジェクトフォルダに、

  • obj
  • corecli.csproj
  • NuGet.config
  • Program.cs

が作成されます。
csprojを見ると、Visual Studioを思い出しますが、中身は少し違います。
ファイルへの参照がない。

1
2
3
4
5
6
7
8
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

</Project>

次に、このフォルダをVisual Studio Codeで開きます。メニューに フォルダーを開く がありますので、そこから開きます。

すると、Required assets to build and debug are missing from ‘corecli’. Add them? と聞かれます。

Yesと応えると、プロジェクトに

  • .vscode\tasks.json
  • .vscode\launch.json

が追加されます。
同時に、There are unresolved dependencies from ‘corecli.csproj’. Please execute the restore command to continue. と聞かれますが、Restoreを選んでも下記のエラーになります。

error: Invalid input 'd:\Works\temp\corecli\corecli.csproj'. The file type was not recognized. Done: 1.

なので、これは諦めます。

デバッグ&実行

現時点で、Program.csには、Hello World! と表示するコードが書かれています。
これを実行します。
Console.WriteLine にF9でブレークポイントを置き、F5で実行してみます。このあたりはVisual Studioと同じで助かります。

実行すると、エラーがでます。

問題を表示するとあるのでクリックしますが、

現時点で問題はワークスペースで検出されていません。 と言われます。意味がわかりません。
仕方ないので、もう一度実行し、今度はこのままデバッグを続ける をクリックします。
すると、今度は下記のメッセージが表示されました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-------------------------------------------------------------------
You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.
-------------------------------------------------------------------
The specified framework 'Microsoft.NETCore.App', version '2.0.0-preview1-002061-00' was not found.

- Check application dependencies and target a framework version installed at:

C:\Program Files\dotnet\shared\Microsoft.NETCore.App

- The following versions are installed:

1.0.0

- Alternatively, install the framework version '2.0.0-preview1-002061-00'.

The target process exited without raising a CoreCLR started event. Ensure that the target process is configured to use .NET Core. This may be expected if the target process did not run on .NET Core.
The program '[23568] corecli.dll' has exited with code -2147450749 (0x80008083).

どうも、依存関係が見つからないご様子。
なので、.NET Core 2.0のフォルダにある、shared\Microsoft.NETCore.App\2.0.0-preview1-002061-00C:\Program Files\dotnet\shared\Microsoft.NETCore.App にコピーします。
その後、もう一度F5実行し、このままデバッグを続ける をクリックします。
今度は、実行に成功し、ブレークポイントに停止しました。

カーソルを次に進めると、下のコンソールにHello World! が表示されます。
少し手こずりましたが、何とか動きました。

あと、実行アセンブリは、dllが拡張子なのね…

コンソールからビルド&実行

Visual Studio Codeから実行しましたが、dotnet.exeからもビルドしてみます。
同じようにカレントをプロジェクトフォルダに移動したコマンドプロンプトから下記でビルドします。

1
2
3
4
5
6
7
8
9
10
11
D:\Works\temp\corecli>"D:\Works\Lib\Microsoft\.NET Core CLI\2.0.0-preview2-005840\bin\dotnet.exe" build
Microsoft (R) Build Engine version 15.2.93.5465
Copyright (C) Microsoft Corporation. All rights reserved.

corecli -> D:\Works\temp\corecli\bin\Debug\netcoreapp2.0\corecli.dll

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

Time Elapsed 00:00:02.92

続いて実行します。

1
2
D:\Works\temp\corecli>"D:\Works\Lib\Microsoft\.NET Core CLI\2.0.0-preview2-005840\bin\dotnet.exe" run
Hello World!

問題なく実行できました。
これならLinuxでも実行できそうです。