ここでは.NET Frameworkでのクラスライブラリについてと、その作り方について解説します。 クラスライブラリを作成する言語と使用する言語に同一の言語を使用しますが、異なる言語のクラスライブラリを使用することもできます。 その場合の注意点などについては言語間の相互運用性と共通言語仕様 (CLS)で解説しています。 また、XMLドキュメントコメントを用いたドキュメントの作成では作成したクラスライブラリのドキュメントを作成する方法について解説しています。 必要に応じて参照してください。

なお、ここで紹介するクラスライブラリはデザインに関するガイドラインに従うようにしていますが、ガイドラインの詳細については触れません。 詳しくはMSDNのクラス ライブラリ開発のデザイン ガイドラインを参照してください。

また、名前空間やクラスの基本など、クラスライブラリを作成する上で必要になってくる言語の要素については解説しないので、必要に応じて以下のページなどを参照してください。

.NET Frameworkにおけるライブラリの位置づけ

クラスライブラリの作り方を見ていく前に、.NET Frameworkにおけるクラスライブラリの位置づけと関連する概念についてざっと触れておきます。

.NET Frameworkにおいては、実行可能ファイル(.exe)やライブラリ(.dll)はアセンブリという構成単位で扱われます。 アセンブリには、アプリケーションプロセスを起動するためのエントリポイント(Mainメソッド)を含む実行可能なアセンブリと、エントリポイントは持たずアプリケーションや他のライブラリから使用されるクラスを含むライブラリアセンブリがあります。 .NET Frameworkにおけるクラスライブラリは、ライブラリアセンブリとしてビルドされることになります。

各アセンブリには、アセンブリの実行コードの他、アセンブリが外部に公開する型の情報やアセンブリ自身が依存する他のアセンブリについての参照情報などのメタデータが含まれています。 そのため、ビルド・実行時にはヘッダーファイルやlibファイルといったファイルは不要で、アセンブリ本体から必要な情報が取得されます。 また、必要に応じてアセンブリにリソースを含めることも出来ます。

アセンブリについての詳細は、以下のドキュメントを参照してください。

.NET Frameworkのクラスライブラリは、C#やVB.NETなどの言語で記述・使用することが出来ます。 例えばC#で記述したライブラリアセンブリを参照してVB.NETで使用するといったことが可能です。

クラスライブラリを異なる言語でも使用できるようにする場合に考慮すべき事項や注意点などについては言語間の相互運用性と共通言語仕様 (CLS)で解説します。

ライブラリアセンブリの作成

それではクラスライブラリの作り方について見ていきます。 ここでは、コマンドラインを使った場合と、IDEを使った場合の二つの方法でのクラスライブラリの作り方について紹介します。 なお、以下の手順では次のような構成のクラスライブラリを作成することにします。

アセンブリ名
Smdn.Utils (Smdn.Utils.dll)
ルート名前空間
Smdn.Utils
アセンブリに含める型
以下の2つのクラスを含める
StringUtilsクラス
文字列操作に関する以下のユーティリティメソッドを提供する
Reverseメソッド
引数で指定された文字列の並びを逆転した文字列を返すメソッド
SplitBySpaceメソッド
引数で指定された文字列を全角および半角の空白で区切った配列で返すメソッド
OrderByLengthComparerクラス
Comparer<string>を継承し、文字列の長さに従って並べ替えるようにオーバーライドしたクラス

ソースファイルの内容

以下の手順では、一つのソースファイルに一つのクラスを含めるようにします。 個々のソースファイルに記述する内容は、以下の内容を使います。

StringUtils.cs
using System;

namespace Smdn.Utils {
  public static class StringUtils {
    public static string Reverse(string str)
    {
      if (str == null) throw new ArgumentNullException("str");

      char[] chars = str.ToCharArray();

      Array.Reverse(chars);

      return new string(chars);
    }

    public static string[] SplitBySpace(string str)
    {
      if (str == null) throw new ArgumentNullException("str");

      return str.Split(new char[] {' ', ' '}, StringSplitOptions.None);
    }
  }
}
OrderByLengthComparer.cs
using System;
using System.Collections.Generic;

namespace Smdn.Utils {
  public class OrderByLengthComparer : Comparer<string> {
    public override int Compare(string x, string y)
    {
      return x.Length - y.Length;
    }
  }
}
StringUtils.vb
Imports System

Namespace Smdn.Utils
  Public Module StringUtils
    Public Function Reverse(ByVal str As String) As String
      If str Is Nothing Then Throw New ArgumentNullException("str")

      Dim chars() As Char = str.ToCharArray()

      Array.Reverse(chars)

      Return New String(chars)
    End Function

    Public Function SplitBySpace(ByVal str As String) As String()
      If str Is Nothing Then Throw New ArgumentNullException("str")

      Return str.Split(New Char() {" "c, " "c}, StringSplitOptions.None)
    End Function
  End Module
End Namespace
OrderByLengthComparer.vb
Imports System
Imports System.Collections.Generic

Namespace Smdn.Utils
  Public Class OrderByLengthComparer
    Inherits Comparer(Of String)

    Public Overrides Function Compare(ByVal x As String, ByVal y As String) As Integer
      Return x.Length - y.Length
    End Function
  End Class
End Namespace

また、クラスライブラリを作成した後、動作テストをするために以下のコードを使います。

test.cs; 作成したクラスライブラリをテストするプログラム
using System;
using Smdn.Utils;

class Sample {
  static void Main()
  {
    string s1 = "The quick brown fox jumps over the lazy dog";
    string s2 = "かごめかごめ かごのなかのとりは いついつでやる";

    // StringUtils.Reverseメソッドのテスト
    Console.WriteLine("[StringUtils.Reverse]");
    Console.WriteLine(StringUtils.Reverse(s1));
    Console.WriteLine(StringUtils.Reverse(s2));

    // StringUtils.SplitBySpaceメソッドのテスト
    string[] w1 = StringUtils.SplitBySpace(s1);
    string[] w2 = StringUtils.SplitBySpace(s2);

    Console.WriteLine("[StringUtils.SplitBySpace]");

    Print(w1);
    Print(w2);

    // OrderByLengthComparerクラスのテスト
    Console.WriteLine("[OrderByLengthComparer]");

    OrderByLengthComparer comparer = new OrderByLengthComparer();

    Array.Sort(w1, comparer);
    Array.Sort(w2, comparer);

    Print(w1);
    Print(w2);
  }

  static void Print(string[] words)
  {
    foreach (string word in words) {
      Console.WriteLine(word);
    }
  }
}
test.vb; 作成したクラスライブラリをテストするプログラム
Imports System
Imports Smdn.Utils

Class Sample
  Shared Sub Main()
    Dim s1 As String = "The quick brown fox jumps over the lazy dog"
    Dim s2 As String = "かごめかごめ かごのなかのとりは いついつでやる"

    ' StringUtils.Reverseメソッドのテスト
    Console.WriteLine("[StringUtils.Reverse]")
    Console.WriteLine(StringUtils.Reverse(s1))
    Console.WriteLine(StringUtils.Reverse(s2))

    ' StringUtils.SplitBySpaceメソッドのテスト
    Dim w1() As String = StringUtils.SplitBySpace(s1)
    Dim w2() As String = StringUtils.SplitBySpace(s2)

    Console.WriteLine("[StringUtils.SplitBySpace]")

    Print(w1)
    Print(w2)

    ' OrderByLengthComparerクラスのテスト
    Console.WriteLine("[OrderByLengthComparer]")

    Dim comparer As New OrderByLengthComparer()

    Array.Sort(w1, comparer)
    Array.Sort(w2, comparer)

    Print(w1)
    Print(w2)
  End Sub

  Shared Sub Print(ByVal words() As String)
    For Each word As String In words
      Console.WriteLine(word)
    Next
  End Sub
End Class

コマンドラインでの作成手順

ここではクラスライブラリの作成に必要最低限の手順を理解するためにコマンドラインでのビルド手順を解説します。 コマンドラインでの操作に興味がない場合は、IDEを使ったビルド手順まで読み飛ばしてください。

csc, vbcを使った例

ここではMicrosoftのC#コンパイラであるcsc.exeとVisual Basicコンパイラであるvbc.exeを使ってクラスライブラリを作成する手順を見ていきます。 クラスライブラリをビルドする上で最低限必要なコンパイルオプションは以下のとおりです。

/target:library
出力するアセンブリの種類をライブラリアセンブリにする
/out:Smdn.Utils.dll
出力ファイル名を"Smdn.Utils.dll"にする
(入力ファイル)
ビルドするライブラリアセンブリのソースファイル(先に挙げたライブラリのソースファイル2つ)を指定する

vbcでは、必要に応じて/optionstrict+や/optionexplicit+などのオプションも指定します。

cscでのクラスライブラリのビルド
D:\classlibrary\cs>csc /target:library /out:Smdn.Utils.dll StringUtils.cs OrderByLengthComparer.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.


D:\classlibrary\cs>dir /B
OrderByLengthComparer.cs
Smdn.Utils.dll
StringUtils.cs
vbcでのクラスライブラリのビルド
D:\classlibrary\vb>vbc /optionstrict+ /optionexplicit+ /target:library /out:Smdn.Utils.dll StringUtils.vb OrderByLengthComparer.vb
Microsoft (R) Visual Basic Compiler Version 9.0.30729.1
Copyright (C) Microsoft Corporation. All rights reserved.


D:\classlibrary\vb>dir /B
OrderByLengthComparer.vb
Smdn.Utils.dll
StringUtils.vb

ビルドが完了すると、上記のとおりライブラリアセンブリSmdn.Utils.dllが作成されているはずです。 なお、環境変数PATHを設定していない場合はcsc、vbcを実行出来ないので、以下のコマンドでパスを通しておく必要があります。

csc・vbcを使用するためにパスを通す
set PATH=C:\WINDOWS\Microsoft.NET\Framework\v3.5;%PATH%

mcs, vbncを使った例

ここではMonoのC#コンパイラであるmcs(gmcs)とVisual Basicコンパイラであるvbncを使ってクラスライブラリを作成する手順を見ていきます。 基本的にはcsc・vbcと同じで、クラスライブラリをビルドする上で最低限必要なコンパイルオプションは以下のとおりです。

/target:library
出力するアセンブリの種類をライブラリアセンブリにする
/out:Smdn.Utils.dll
出力ファイル名を"Smdn.Utils.dll"にする
(入力ファイル)
ビルドするライブラリアセンブリのソースファイル(先に挙げたライブラリのソースファイル2つ)を指定する

vbncでは、必要に応じて/optionstrict+や/optionexplicit+などのオプションも指定します。

gmcsでのクラスライブラリのビルド
[~/classlibrary/cs]$ gmcs /target:library /out:Smdn.Utils.dll StringUtils.cs OrderByLengthComparer.cs
[~/classlibrary/cs]$ ls -1
OrderByLengthComparer.cs
Smdn.Utils.dll
StringUtils.cs
vbncでのクラスライブラリのビルド
[~/classlibrary/vb]$ vbnc /optionstrict+ /optionexplicit+ /target:library /out:Smdn.Utils.dll StringUtils.vb OrderByLengthComparer.vb
Visual Basic.Net Compiler version 0.0.0.5943
Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved.


Assembly 'Smdn.Utils, Version=0.0, Culture=neutral, PublicKeyToken=null' saved successfully to '/home/smdn/classlibrary/vb/Smdn.Utils.dll'.
Compilation successful
Compilation took 00:00:00.9039670
[~/classlibrary/vb]$ ls -1
OrderByLengthComparer.vb
Smdn.Utils.dll
StringUtils.vb

ビルドが完了すると、上記のとおりライブラリアセンブリSmdn.Utils.dllが作成されているはずです。

ビルドしたライブラリのテスト

ここまでの手順で作成したクラスライブラリを使って実行可能ファイルを作り、動作テストをしてみます。 ライブラリアセンブリを使って実行可能ファイルをビルドする上で最低限必要なコンパイルオプションは以下のとおりです(すべてcsc・vbcおよびmcs・vbncで共通するオプションです)。

/r:Smdn.Utils.dll
ライブラリアセンブリ(作成したSmdn.Utils.dll)を参照するように指定する
(入力ファイル)
実行可能ファイルのソースファイル(先に挙げたテスト用のソースファイル)を指定する

vbc・vbncでは、必要に応じて/optionstrict+や/optionexplicit+などのオプションも指定します。

cscを使ってクラスライブラリを参照してビルドする
D:\classlibrary\cs>csc /r:Smdn.Utils.dll test.cs
Microsoft (R) Visual C# 2008 Compiler version 3.5.30729.1
for Microsoft (R) .NET Framework version 3.5
Copyright (C) Microsoft Corporation. All rights reserved.


D:\classlibrary\cs>dir /B
OrderByLengthComparer.cs
Smdn.Utils.dll
StringUtils.cs
test.cs
test.exe
vbcを使ってクラスライブラリを参照してビルドする
D:\classlibrary\vb>vbc /optionstrict+ /optionexplicit+ /r:Smdn.Utils.dll test.vb
Microsoft (R) Visual Basic Compiler Version 9.0.30729.1
Copyright (C) Microsoft Corporation. All rights reserved.


D:\classlibrary\vb>dir /B
OrderByLengthComparer.vb
Smdn.Utils.dll
StringUtils.vb
test.exe
test.vb
gmcsを使ってクラスライブラリを参照してビルドする
[~/classlibrary/cs]$ gmcs /r:Smdn.Utils.dll test.cs
[~/classlibrary/cs]$ ls -1
OrderByLengthComparer.cs
Smdn.Utils.dll
StringUtils.cs
test.cs
test.exe
vbncを使ってクラスライブラリを参照してビルドする
[~/classlibrary/vb]$ vbnc /optionstrict+ /optionexplicit+ /r:Smdn.Utils.dll test.vb 
Visual Basic.Net Compiler version 0.0.0.5943
Copyright (C) 2004-2010 Rolf Bjarne Kvinge. All rights reserved.


Assembly 'test, Version=0.0, Culture=neutral, PublicKeyToken=null' saved successfully to '/home/smdn/classlibrary/vb/test.exe'.
Compilation successful
Compilation took 00:00:00.9068700
[~/classlibrary/vb]$ ls -1
OrderByLengthComparer.vb
Smdn.Utils.dll
StringUtils.vb
test.exe
test.vb

ビルドが完了したら、上記のとおり実行可能ファイルtest.exeが作成されているはずです。 このファイルを実行すると、次のようなテスト結果が得られるはずです。

実行結果
[StringUtils.Reverse]
god yzal eht revo spmuj xof nworb kciuq ehT
るやでついつい はりとのかなのごか めごかめごか
[StringUtils.SplitBySpace]
The
quick
brown
fox
jumps
over
the
lazy
dog
かごめかごめ
かごのなかのとりは
いついつでやる
[OrderByLengthComparer]
the
fox
The
dog
over
lazy
quick
brown
jumps
かごめかごめ
いついつでやる
かごのなかのとりは

IDEでの作成手順と設定

ここではIDEを使ってクラスライブラリを作成する手順と、作成したクラスライブラリを使用する手順について解説します。 ここで紹介する手順では、一つのソリューションにクラスライブラリ用のプロジェクトとテスト用のプロジェクトを含めることにします。 IDEを使わずコマンドラインで作成したい場合はコマンドラインを使ったビルド手順を参照してください。

Visual Studio 2008での例

ソリューションとクラスライブラリ用のプロジェクトの作成

まずは、ソリューションとクラスライブラリ用のプロジェクトを作成します。 [ファイル]メニューから[新規作成]→[プロジェクト]を選択します。

[ファイル]→[新規作成]→[プロジェクト]メニュー

次に、種類の一覧で[Visual C#]や[Visual Basic]などクラスライブラリを作成する上で使用する言語を指定し、[クラス ライブラリ]を選択します。 [プロジェクト名]の欄にはクラスライブラリのプロジェクト名となる"Smdn.Utils"を指定します。 ここではソリューション名を"classlibrary"としました。

ソリューションとプロジェクトの新規作成

ここまでの手順で、ソリューションとクラスライブラリ用のプロジェクト、ソースファイルのテンプレートが自動生成されます。 以降、このプロジェクトをビルドすると、ライブラリアセンブリが作成されます。 テンプレートファイル(Class1)は不要なので削除しておくと良いでしょう。

続いて、クラスのコードを記述するためファイルを追加します。 プロジェクトファイルのコンテキストメニューから[追加]→[新しい項目]を選択します。

[追加]→[新しい項目]メニュー

種類の一覧で[コード]を指定し、[クラス]を選択します。 ファイル名にはクラス名+拡張子を指定します。

ファイルの新規作成

上記の手順を繰り返してクラス用のファイルを作成し、先に挙げたソースコードを記述します。

作成されたファイル

テスト用のプロジェクトの追加

次に、テスト用のプロジェクトを追加します。 クラスライブラリにはエントリーポイントがなく実行することはできないので、作成したクラスライブラリを使用してテスト用のコードを実行するためのプロジェクトを作成します。 ソリューションファイルのコンテキストメニューから[追加]→[新しいプロジェクト]を選択します。

[追加]→[新しいプロジェクト]メニュー

クラスライブラリ用のプロジェクトの場合とは異なり実行可能ファイルを作成する必要があるので、ここでは[コンソール アプリケーション]を選択します。 [プロジェクト名]の欄には実行可能ファイルのプロジェクト名となる名前を入力します。 ここではプロジェクト名を"test"としました。

プロジェクトの新規作成

ここまでの手順で、テスト用のプロジェクトがソリューションに追加され、ソースファイルのテンプレートが自動生成されます。 テスト用のプロジェクトが追加出来たら、クラスライブラリのアセンブリを参照するようにします。 プロジェクトの参照設定のコンテキストメニューから[参照の追加]を選択します。

[参照の追加]メニュー

[プロジェクト]タブを選択し、クラスライブラリのプロジェクトである"Smdn.Utils"を選択します。

参照するプロジェクトの選択

これで、テスト用プロジェクトのビルド時にクラスライブラリのプロジェクトを参照するようになります。

編集したあとの参照設定

ここまでの手順で、通常の.NET Frameworkのクラスと同様にusing文(Importsステートメント)で名前空間をインポートしてクラス名を記述すると、次のように入力候補に表示されるようになります。

入力候補に表示されるライブラリのクラスとメソッド

スタートアッププロジェクトの設定

次に、ビルド後にテスト用プロジェクトを実行するようにソリューションの設定を変更します。 ソリューションのコンテキストメニューから[プロパティ]を選択します。

[プロパティ]メニュー

[共通プロパティ]→[スタートアップ プロジェクト]の項目を選択し、[シングル スタートアップ プロジェクト]を選択してテスト用のプロジェクトである"test"を指定します。

スタートアップ プロジェクトの設定

あとは先に挙げたテスト用のソースコードを記述し、ビルド・実行するとコンソールが表示され次のような結果が得られるはずです。

実行結果

出力結果とフォルダの内容

ビルド時の出力を確認すると、次のようになっていると思います。 ビルド時のオプションはコマンドラインでのビルドで指定したのと同じようになっていることが分かると思います。 また、ビルドの順番を見ると分かるとおり、先にクラスライブラリがビルドされ、その次にデバッグ用のプロジェクトがビルドされています。

ビルド時の出力
------ すべてのリビルド開始: プロジェクト: Smdn.Utils, 構成: Debug Any CPU ------
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\Smdn.Utils.dll /target:library OrderByLengthComparer.cs Properties\AssemblyInfo.cs StringUtils.cs

コンパイルの完了 -- エラー 0、警告 0
Smdn.Utils -> e:\classlibrary\Smdn.Utils\bin\Debug\Smdn.Utils.dll
------ すべてのリビルド開始: プロジェクト: test, 構成: Debug Any CPU ------
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:e:\classlibrary\Smdn.Utils\bin\Debug\Smdn.Utils.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\test.exe /target:exe Program.cs Properties\AssemblyInfo.cs

コンパイルの完了 -- エラー 0、警告 0
test -> e:\classlibrary\test\bin\Debug\test.exe
========== すべてリビルド: 2 正常終了、0 失敗、0 スキップ ==========

なお、ビルド後に生成されたファイルは次のようになっていると思います。 クラスライブラリプロジェクトのフォルダのbin/Debug/にはdllファイルが、テスト用プロジェクトのフォルダのbin/Debug/にはクラスライブラリのdllファイルのコピーと実行可能ファイルのexeが生成されています。 以下はVisual C#での例ですが、Visual Basicでも同様の出力となります。

E:\CLASSLIBRARY
│  classlibrary.sln
│
├─Smdn.Utils
│  │  OrderByLengthComparer.cs
│  │  Smdn.Utils.csproj
│  │  StringUtils.cs
│  │
│  ├─bin
│  │  └─Debug
│  │          Smdn.Utils.dll
│  │          Smdn.Utils.pdb
│  │
│  ├─obj
│  │  └─Debug
│  │      │  Smdn.Utils.csproj.FileListAbsolute.txt
│  │      │  Smdn.Utils.dll
│  │      │  Smdn.Utils.pdb
│  │      │
│  │      └─TempPE
│  └─Properties
│          AssemblyInfo.cs
│
└─test
    │  Program.cs
    │  test.csproj
    │
    ├─bin
    │  └─Debug
    │          Smdn.Utils.dll
    │          Smdn.Utils.pdb
    │          test.exe
    │          test.pdb
    │          test.vshost.exe
    │          test.vshost.exe.manifest
    │
    ├─obj
    │  └─Debug
    │      │  ResolveAssemblyReference.cache
    │      │  test.csproj.FileListAbsolute.txt
    │      │  test.exe
    │      │  test.pdb
    │      │
    │      └─TempPE
    └─Properties
            AssemblyInfo.cs

MonoDevelop 2.4での例

ソリューションとクラスライブラリ用のプロジェクトの作成

まずは、ソリューションとクラスライブラリ用のプロジェクトを作成します。 [ファイル]メニューから[新規]→[ソリューション]を選択します。

[ファイル]→[新規]→[ソリューション]メニュー

次に、種類の一覧で[C#]や[VBNet]などクラスライブラリを作成する上で使用する言語をを指定し、[ライブラリ]を選択します。 [名前]の欄にはクラスライブラリのプロジェクト名となる"Smdn.Utils"を指定します。 ここではソリューション名を"classlibrary"としました。

ソリューションとプロジェクトの新規作成

続いて、このプロジェクトで有効にする機能を指定するオプションが提示されますが、ここでは特に指定せずに次に進みます。

プロジェクトの機能

ここまでの手順で、ソリューションとクラスライブラリ用のプロジェクト、ソースファイルのテンプレートが自動生成されます。 以降、このプロジェクトをビルドすると、ライブラリアセンブリが作成されます。 AssemblyInfoはライブラリアセンブリの情報を記述するファイルなので残しておいても良いですが、テンプレートファイルは不要なので削除しておくと良いでしょう。

作成されたソリューションとプロジェクト

続いて、クラスのコードを記述するためファイルを追加します。 プロジェクトファイルのコンテキストメニューから[追加]→[新しいファイル]を選択します。

[追加]→[新しいファイル]メニュー

種類の一覧で[General]を指定し、[空のファイル]を選択します。 名前にはクラス名を指定します。 ファイル名はこの名前を元に自動的に設定されます。

ファイルの新規作成

上記の手順を繰り返してクラス用のファイルを作成し、先に挙げたソースコードを記述します。

作成されたファイル

テスト用のプロジェクトの追加

次に、テスト用のプロジェクトを追加します。 クラスライブラリにはエントリーポイントがなく実行することはできないので、作成したクラスライブラリを使用してテスト用のコードを実行するためのプロジェクトを作成します。 ソリューションファイルのコンテキストメニューから[追加]→[新しいプロジェクトを追加]を選択します。

[追加]→[新しいプロジェクトを追加]メニュー

クラスライブラリ用のプロジェクトの場合とは異なり実行可能ファイルを作成する必要があるので、ここでは[コンソール プロジェクト]を選択します。 [名前]の欄には実行可能ファイルのプロジェクト名となる名前を入力します。 ここではプロジェクト名を"test"としました。

プロジェクトの新規作成

ここまでの手順で、テスト用のプロジェクトがソリューションに追加され、ソースファイルのテンプレートが自動生成されます。 テスト用のプロジェクトが追加出来たら、クラスライブラリのアセンブリを参照するようにします。 プロジェクトの参照アセンブリのコンテキストメニューから[参照アセンブリの編集]を選択します。

[参照アセンブリの編集]メニュー

[プロジェクト]タブを選択し、クラスライブラリのプロジェクトである"Smdn.Utils"にチェックを入れます。

参照するプロジェクトの選択

これで、テスト用プロジェクトのビルド時にクラスライブラリのプロジェクトを参照するようになります。

編集したあとの参照

ここまでの手順で、通常の.NET Frameworkのクラスと同様にusing文(Importsステートメント)で名前空間をインポートしてクラス名を記述すると、次のように入力候補に表示されるようになります。

入力候補に表示されるライブラリのクラスとメソッド

スタートアッププロジェクトの設定

次に、ビルド後にテスト用プロジェクトを実行するようにソリューションの設定を変更します。 ソリューションのコンテキストメニューから[オプション]を選択します。

[オプション]メニュー

[実行]→[スタートアップ プロジェクト]の項目を選択し、[単一のスタートアップ プロジェクト]を選択してテスト用のプロジェクトである"test"を指定します。

スタートアップ プロジェクトの設定

あとは先に挙げたテスト用のソースコードを記述し、ビルド・実行するとコンソールが表示され次のような結果が得られるはずです。

実行結果

出力結果とフォルダの内容

ビルド時の出力を確認すると、次のようになっていると思います。 ビルド時のオプションはコマンドラインでのビルドで指定したのと同じようになっていることが分かると思います。 また、ビルドの順番を見ると分かるとおり、先にクラスライブラリがビルドされ、その次にデバッグ用のプロジェクトがビルドされています。

ビルド時の出力
ビルド中: classlibrary (Debug)

ソリューション classlibrary をビルド中

ビルド中: Smdn.Utils (Debug)

メインのコンパイルを実行中...
/opt/mono/master/bin/gmcs /noconfig "/out:/home/smdn/classlibrary/cs/classlibrary/Smdn.Utils/bin/Debug/Smdn.Utils.dll" "/r:/opt/mono/master/lib/mono/2.0/System.dll" /nologo /warn:4 /debug:+ /debug:full /optimize- /codepage:utf8 "/define:DEBUG"  /t:library "/home/smdn/classlibrary/cs/classlibrary/Smdn.Utils/AssemblyInfo.cs" "/home/smdn/classlibrary/cs/classlibrary/Smdn.Utils/StringUtils.cs" "/home/smdn/classlibrary/cs/classlibrary/Smdn.Utils/OrderByLengthComparer.cs" 
ビルド完了 -- エラー 0件, 警告 0件

ビルド中: test (Debug)

メインのコンパイルを実行中...
/opt/mono/master/bin/gmcs /noconfig "/out:/home/smdn/classlibrary/cs/classlibrary/test/bin/Debug/test.exe" "/r:/opt/mono/master/lib/mono/2.0/System.dll" "/r:/home/smdn/classlibrary/cs/classlibrary/Smdn.Utils/bin/Debug/Smdn.Utils.dll" /nologo /warn:4 /debug:+ /debug:full /optimize- /codepage:utf8 "/define:DEBUG"  /t:exe "/home/smdn/classlibrary/cs/classlibrary/test/Main.cs" "/home/smdn/classlibrary/cs/classlibrary/test/AssemblyInfo.cs" 
ビルド完了 -- エラー 0件, 警告 0件

---------------------- 完了 ----------------------

ビルド成功

なお、ビルド後に生成されたファイルは次のようになっていると思います。 クラスライブラリプロジェクトのフォルダのbin/Debug/にはdllファイルが、テスト用プロジェクトのフォルダのbin/Debug/にはクラスライブラリのdllファイルのコピーと実行可能ファイルのexeが生成されています。 以下はC#での例ですが、VBでも同様の出力となります。

ビルド後のフォルダの内容

クラスライブラリの設計・構成の例

当サイトでは以下のページにて.NET Framework向けのライブラリを公開・配布しています。

ソースも同梱しているので、クラスライブラリの設計・構成の参考になるかもしれません。 よろしければご覧ください。

クラスライブラリの機能の廃止

クラスライブラリで提供している機能を非推奨としたり、廃止したりする際、Obsolete属性を用いると、その旨をライブラリを使ったコードのコンパイル時に利用者に対して通知することができます。 Obsolete属性について詳しくは機能の廃止・旧式化で解説しています。 また、クラスライブラリで提供している機能を廃止する際の方法や考慮すべき点などについては機能の廃止・旧式化 §.機能提供開始から廃止までとObsolete属性で解説しています。

クラスライブラリと言語

ここまでの手順ではクラスライブラリと実行可能ファイルの両方に同じ言語を使って記述してきましたが、別々の言語で記述して使用することも出来ます。 クラスライブラリが異なる言語からも使用されることを想定する場合には、言語間の相互運用性について留意しておく必要があります。 この点については次のページで詳しく解説します。