.NET Core, ローカルライブラリをNuGetでパッケージ化して、他のプロジェクトにインストールする方法


はじめに

.NET Core でローカルのライブラリを作成して NuGet でパッケージ化し、他のプロジェクトにインストールしようと思ったのですが、ネット上のどこにも具体的な方法が掲載されておらずかなり苦労しましたが、ようやくその方法が分かりましたのでご紹介します。

なお、環境は Mac (macOS High Sierra 10.13.3) で .NET Core SDK 2.1.4、Visual Studio Code になります。Windows でもパスさえ変えれば同じように動作すると思います。

クラスライブラリの作成

下記のコマンドでクラスライブラリを作成します。

$ dotnet new classlib -o HelloString

このライブラリに Hello.cs というファイルを作成します。内容は Hello! と文字列を返すだけです。

using System;

namespace HelloString
{
    public class Hello
    {
        public static string GetHello() {
            return "Hello!";
        }
    }
}

NuGet パッケージの作成

以下のコマンドを実行すると、上記クラスライブラリの NuGet パッケージである .nupkg ファイルが Release ディレクトリに作成されます。

$ dotnet pack -c Release HelloString.csproj

今回は、HelloString.1.0.0.nupkg という NuGet パッケージが作成されました。

このファイルを NuGet のローカルのリポジトリにコピーします(後でリポジトリ設定)。ユーザー名の xxx はご自身のユーザー名に書き換えてください。

$ mkdir /Users/xxx/Projects/Repos
$ cd bin/Release
$ cp HelloString.1.0.0.nupkg /Users/xxx/Projects/Repos

NuGet.config ファイル設定

ここで、NuGet.config ファイルを編集して、nuget.org だけでなくローカルのリポジトリからも NuGet パッケージをインストールできるように設定します。

問題の NuGet.config の在り処ですが、Windows では「%APPDATA%\NuGet\NuGet.Config」、Mac では「~/.nuget/NuGet/NuGet.Config」になります。

そして、NuGet.config をテキストエディタで開いて以下のように編集します。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />

    <!--Add-->
    <add key="local" value="/Users/xxx/Projects/Repos" />
  </packageSources>
</configuration>

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

NuGet パッケージを使用するコンソールアプリケーションを新規に作成します。

$ dotnet new console -o ConsoleNuGet

先ほどの NuGet パッケージをインストールします。

$ dotnet add package HelloString
$ dotnet restore

問題なく終了したので、次は Program.cs を以下のように修正します。

using System;
using HelloString;

namespace ConsoleNuGet
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(Hello.GetHello());
        }
    }
}

準備が完了したので、実際に実行してみます。

$ dotnet build
$ dotnet run
Hello!

うまくいきましたね!

おわりに

.NET Core のクラスライブラリを NuGet パッケージ化することで、他のプロジェクトでのインストールが楽になります。

この方法は知っておいて損はないかと思います。

他にもプロジェクトの参照を追加する方法があるのですが、そちらはプロジェクト一式がそろっている必要があるので、NuGet の方が使い勝手がよいのではないでしょうか。

参考サイト