macでdotnet/coreの環境構築、Nugetの導入、自作ライブラリを組み込む

MacC#である。dotnet/coreをMacで実行するとは、つまりそういうことだ。

近年のMicrosoftは大好きだ。

概要

環境

dotnet/coreの環境構築

  • dot net SDK 2.1.301

インストーラーに従いインストール。

$ curl -O https://download.microsoft.com/download/D/0/4/D04C5489-278D-4C11-9BD3-6128472A7626/dotnet-sdk-2.1.301-osx-gs-x64.pkg
$ open dotnet-sdk-2.1.301-osx-gs-x64.pkg

dotnetコマンドを実行し、バージョンの確認。

$ dotnet --version
2.1.301
$ dotnet

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
$ dotnet help

.NET Core へようこそ!
---------------------
.NET Core についての詳細情報: https://aka.ms/dotnet-docs
'dotnet --help' を使用して利用可能なコマンドを確認するか、次にアクセスしてください: https://aka.ms/dotnet-cli-docs

テレメトリ
---------
.NET Core ツールは、エクスペリエンスの向上に役立つ利用状況データを収集します。データは匿名で、コマンドライン引数が含まれません。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、お好きなシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1' または 'true' に設定します。

.NET Core CLI ツールのテレメトリに関する詳細情報をお読みください: https://aka.ms/dotnet-cli-telemetry

ASP.NET Core
------------
ASP.NET Core HTTPS 開発証明書が正常にインストールされました。
証明書を信頼する (Windows および macOS のみ) には、まず 'dotnet tool install dotnet-dev-certs -g --version 2.1.0-preview1-final' を実行して dev-certs ツールをインストールし、次に 'dotnet-dev-certs https --trust' を実行します。
HTTPS を構成する方法の詳細については、https://go.microsoft.com/fwlink/?linkid=848054 をご覧ください。
.NET コマンド ライン ツール (2.1.301)
使用法: dotnet [runtime-options] [path-to-application]
使用法: dotnet [sdk-options] [command] [arguments] [command-options]

path-to-application:
  実行するアプリケーション .dll ファイルへのパス。

SDK コマンド:
  new              .NET プロジェクトを初期化します。
  restore          .NET プロジェクトに指定されている依存関係を復元します。
  run              .NET プロジェクトをコンパイルして、直ちに実行します。
  build            .NET プロジェクトを構築します。
  publish          展開用の .NET プロジェクトを発行します (ランタイムを含む)。
  test             プロジェクトに指定されているテスト ランナーを使用して、単体テストを実行します。
  pack             NuGet パッケージを作成します。
  migrate          project.json ベースのプロジェクトを msbuild ベースのプロジェクトに移行します。
  clean            ビルド出力を消去します。
  sln              ソリューション (SLN) ファイルを変更します。
  add              参照をプロジェクトに追加します。
  remove           参照をプロジェクトから削除します。
  list             プロジェクトの参照またはインストール済みツールを一覧表示します。
  nuget            追加の NuGet コマンドを提供します。
  msbuild          Microsoft Build Engine (MSBuild) を実行します。
  vstest           Microsoft Test Execution Command Line Tool を実行します。
  store            指定されたアセンブリを実行時ストアに格納します。
  tool             .NET のエクスペリエンスを向上するツールをインストールするか、使用します。
  build-server     ビルドによって開始されたサーバーとやり取りします。
  help             ヘルプを表示します。

共通のオプション:
  -v|--verbosity        コマンドの詳細レベルを設定します。使用可能な値: q[uiet]、m[inimal]、n[ormal]、d[etailed]、diag[nostic]。
  -h|--help             ヘルプを表示します。

コマンドに関する詳細情報については、'dotnet COMMAND --help' を実行します。

sdk-options:
  --version        使用中の .NET Core SDK バージョンを表示します。
  --info           .NET Core 情報を表示します。
  --list-sdks      インストール済み SDK を表示します。
  --list-runtimes  インストール済みランタイムを表示します。
  -d|--diagnostics 診断出力を有効にします。

runtime-options:
  --additionalprobingpath <path>    調査ポリシーと調査対象アセンブリを含むパス。
  --fx-version <version>            アプリケーションを実行するために使用するインストール済み Shared Framework のバージョン。
  --roll-forward-on-no-candidate-fx 候補がない Shared Framework に対するロールフォワードが有効です。
  --additional-deps <path>          追加の deps.json ファイルへのパス。

Additional tools ('dotnet [tool-name] --help' for more information):
  dev-certs      Create and manage development certificates.
  ef             Entity Framework Core command-line tools.
  sql-cache      SQL Server cache command-line tools.
  user-secrets   Manage development user secrets.
  watch          Start a file watcher that runs a command when files change.

dotnet/coreを実行

.NET and C# - Get started in 10 minutes を試し、dotnet/coreを実行。

  • dotnetコマンドでアプリケーションを作成
  • 作成されたテンプレートの確認
  • 実行

コンソールアプリケーションの作成

$ dotnet new console -o App
準備しています...
テンプレート "Console Application" が正常に作成されました。

作成後のアクションを処理しています...
'dotnet restore' を App/App.csproj で実行しています...
  /path/to/App/App.csproj のパッケージを復元しています...
  Microsoft.NETCore.DotNetAppHost 2.1.0 をインストールしています。
  Microsoft.NETCore.DotNetHostResolver 2.1.0 をインストールしています。
  Microsoft.NETCore.DotNetHostPolicy 2.1.0 をインストールしています。
  Microsoft.NETCore.Targets 2.1.0 をインストールしています。
  Microsoft.NETCore.App 2.1.0 をインストールしています。
  MSBuild ファイル /path/to/App/obj/App.csproj.nuget.g.props を生成しています。
  MSBuild ファイル /path/to/App/obj/App.csproj.nuget.g.targets を生成しています。
  /path/to/App/App.csproj の復元が 5.97 sec で完了しました。

正常に復元されました。
作成されたテンプレートの確認
$ cd App/
$ ls
App.csproj	Program.cs	obj
App.csprojの中身を確認
$ cat App.csproj
<Project Sdk="Microsoft.NET.Sdk">

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

</Project>
Program.csの中身を確認
$ cat Program.cs 
using System;

namespace App
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}
実行
$ dotnet run
Hello World!

Nugetの導入、自作ライブラリを作成

macOS での .NET Core の概要 | Microsoft Docs をなぞり、Nugetを組み込む。
Nugetはパッケージマネージャ。

dotnet new sln

$ dotnet new sln
テンプレート "Solution File" が正常に作成されました。
$ ls
App		dotnetcore.sln

dotnet new classlib -o library

$ dotnet new classlib -o library
テンプレート "Class library" が正常に作成されました。

作成後のアクションを処理しています...
'dotnet restore' を library/library.csproj で実行しています...
 /path/to/library/library.csproj のパッケージを復元しています...
  MSBuild ファイル /path/to/library/obj/library.csproj.nuget.g.props を生成しています。
  MSBuild ファイル /path/to/library/obj/library.csproj.nuget.g.targets を生成しています。
  /path/to/library/library.csproj の復元が 275.86 ms で完了しました。

正常に復元されました。
$ dotnet sln add library/library.csproj
プロジェクト `library/library.csproj` をソリューションに追加しました。

Newtonsoft.Jsonをインストール

$ dotnet add library package Newtonsoft.Json
  Writing /var/folders/jn/zrzfgbbd07s_ph4wgm70dsx40000gn/T/tmpPbxSjT.tmp
info : パッケージ 'Newtonsoft.Json' の PackageReference をプロジェクト '/path/to/library/library.csproj' に追加しています。
log  : /path/to/library/library.csproj のパッケージを復元しています...
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json 175 ミリ秒
info : パッケージ 'Newtonsoft.Json' は、プロジェクト '/path/to/library/library.csproj' のすべての指定されたフレームワークとの互換性があります。
info : ファイル '/path/to/library/library.csproj' に追加されたパッケージ 'Newtonsoft.Json' バージョン '11.0.2' の PackageReference
$ dotnet restore
  /path/to/library/library.csproj のパッケージを復元しています...
  /path/to/library/library.csproj の復元が 231.68 ms で完了しました。
$ dotnet build
.NET Core 向け Microsoft (R) Build Engine バージョン 15.7.179.6572
Copyright (C) Microsoft Corporation.All rights reserved.

  /path/to/library/library.csproj の復元が 57.28 ms で完了しました。
  library -> /path/to/library/bin/Debug/netstandard2.0/library.dll

ビルドに成功しました。
    0 個の警告
    0 エラー

経過時間 00:00:04.29

作成したlibraryを使う

macOS での .NET Core の概要 | Microsoft Docs をなぞり、作成したLibrary.Thingを使い、実行する。

ソリューションを追加

$ dotnet sln add app/app.csproj
プロジェクト `app/app.csproj` をソリューションに追加しました。

ライブラリの依存関係を追加

$ dotnet add app/app.csproj reference library/library.csproj
参照 `..\library\library.csproj` がプロジェクトに追加されました。

実装。libraryを実際に使うコードに変更

Library.Thingを実際に使う。

$ git diff
diff --git a/path/to/App/Program.cs b/path/to/App/Program.cs
index 227ce6d..ae778b9 100644
--- a/path/to/App/Program.cs
+++ b/path/to/App/Program.cs
@@ -1,4 +1,6 @@
using System;
+using static System.Console;
+using Library;
 
 namespace App
 {
@@ -7,6 +9,7 @@ namespace App
         static void Main(string[] args)
         {
             Console.WriteLine("Hello World!");
+            WriteLine($"The answer is {new Thing().Get(19, 23)}");
         }
     }
 }

実行

$ dotnet run -p app/app.csproj
Hello World!
The answer is 42

まとめ