方法 : マルチファイル アセンブリをビルドする
このセクションでは、マルチファイル アセンブリを作成するために使用する手順について説明し、各手順の内容を示す完全な例を示します。
マルチファイル アセンブリを作成するには、次のようにします。
アセンブリ内のほかのモジュールによって参照される名前空間を含むすべてのファイルをコンパイルして、コード モジュールを生成します。 コード モジュールの既定の拡張子は . netmodule になります。 たとえば、Client ファイル コード内で参照される myStringer 名前空間を Stringer ファイルが作成する場合、Stringer は最初にコード モジュールとしてコンパイルされます。
コード内で参照されるほかのモジュールを示すために必要なコンパイラ オプションを使用して、ほかのすべてのモジュールをコンパイルします。
アセンブリ リンカー (Al.exe) を使用して、アセンブリ マニフェストを格納する出力ファイルを作成します。 このファイルは、アセンブリの一部であるすべてのモジュールまたはリソースについての参照情報を格納します。
メモ Visual Studio 2005 IDE for C# および Visual Basic は、シングルファイル アセンブリの作成でしか使用できません。マルチファイル アセンブリを作成する場合は、コマンド ライン コンパイラまたは Visual C++ 付き Visual Studio 2005 を使用する必要があります。
次の例は、上記の手順 1 の操作を示しています。ここでは、他のファイルから参照される名前空間を持つファイルをコンパイルします。 この例では、最初に Stringer ファイルの単純なコードを示します。 Stringer には、myStringer 名前空間と Stringer クラスがあります。 Stringer クラスには、コンソールに 1 つの行を書き込む StringerMethod メソッドが含まれます。
' Assembly building example in the .NET Framework.
Imports System
Namespace myStringer
Public Class Stringer
Public Sub StringerMethod()
System.Console.WriteLine("This is a line from StringerMethod.")
End Sub
End Class
End Namespace
// Assembly building example in the .NET Framework.
using System;
namespace myStringer
{
public class Stringer
{
public void StringerMethod()
{
System.Console.WriteLine("This is a line from StringerMethod.");
}
}
}
// Assembly building example in the .NET Framework.
using namespace System;
namespace myStringer
{
public ref class Stringer
{
public:
void StringerMethod()
{
System::Console::WriteLine("This is a line from StringerMethod.");
}
};
}
このコードをコンパイルするには、次のコマンドを使用します。
vbc /t:module Stringer.vb
csc /t:module Stringer.cs
cl /clr:pure /LN Stringer.cpp
module パラメーターと /t: コンパイラ オプションを指定すると、ファイルはアセンブリではなくモジュールとしてコンパイルされます。 コンパイラは、アセンブリに追加できる Stringer.netmodule モジュールを生成します。
上記の手順 2 では、他のモジュールへの参照を持つモジュールをコンパイルする必要があります。 この手順では、/addmodule コンパイラ オプションを使用します。 次の例では、Client コード モジュールに、手順 1 で作成した Stringer.dll モジュール内のメソッドを参照するエントリ ポイント Main メソッドがあります。
Client のコード例を次に示します。
Imports System
Imports myStringer 'The namespace created in Stringer.netmodule.
Class MainClientApp
' Static method Main is the entry point method.
Public Shared Sub Main()
Dim myStringInstance As New Stringer()
Console.WriteLine("Client code executes")
myStringInstance.StringerMethod()
End Sub
End Class
using System;
using myStringer; //The namespace created in Stringer.netmodule.
class MainClientApp
{
// Static method Main is the entry point method.
public static void Main()
{
Stringer myStringInstance = new Stringer();
Console.WriteLine("Client code executes");
myStringInstance.StringerMethod();
}
}
#using "Stringer.netmodule"
using namespace System;
using namespace myStringer; //The namespace created in Stringer.netmodule.
ref class MainClientApp
{
// Static method Main is the entry point method.
public:
static void Main()
{
Stringer^ myStringInstance = gcnew Stringer();
Console::WriteLine("Client code executes");
myStringInstance->StringerMethod();
}
};
int main()
{
MainClientApp::Main();
}
このコードをコンパイルするには、次のコマンドを使用します。
vbc /addmodule:Stringer.netmodule /t:module Client.vb
csc /addmodule:Stringer.netmodule /t:module Client.cs
cl /clr:pure /FUStringer.netmodule /LN Client.cpp
このモジュールは後の手順でアセンブリに追加するため、/t:module オプションを指定します。 Client 内のコードが Stringer.netmodule 内のコードによって作成された名前空間を参照するため、/addmodule オプションを指定します。 コンパイラは、Stringer.netmodule という別のモジュールへの参照を格納する Client.netmodule モジュールを生成します。
メモ |
---|
C# コンパイラと Visual Basic コンパイラは、マルチファイル アセンブリを直接作成する場合、次の 2 種類の構文を使用します。 |
- 2 回のコンパイルで、2 ファイルのアセンブリを作成する。
vbc /t:module Stringer.vb
vbc Client.vb /addmodule:Stringer.netmodule
csc /t:module Stringer.cs
csc Client.cs /addmodule:Stringer.netmodule
cl /clr:pure /LN Stringer.cpp
cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodule
- 1 回のコンパイルで、2 ファイルのアセンブリを作成する。
vbc /out:Client.exe Client.vb /out:Stringer.netmodule Stringer.vb
csc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.cs
cl /clr:pure /LN Stringer.cpp
cl /clr:pure Client.cpp /link /ASSEMBLYMODULE:Stringer.netmodule
アセンブリ リンカー (Al.exe) を使用して、コンパイルされたコード モジュールのコレクションからアセンブリを作成できます。
アセンブリ リンカーを使用してマルチファイル アセンブリを作成するには、次のようにします。
コマンド プロンプトに次のコマンドを入力します。
al <module name> <module name> … /main:<method name> /out:<file name> /target:<assembly file type>
このコマンドで、module name 引数はアセンブリに含める各モジュールの名前を指定します。 /main: オプションは、アセンブリのエントリ ポイントであるメソッド名を指定します。 /out: オプションは、アセンブリ メタデータを格納する出力ファイルの名前を指定します。 /target: オプションは、アセンブリがコンソール アプリケーション実行可能ファイル (.exe)、Windows 実行可能ファイル (.win)、またはライブラリ ファイル (.lib) であることを指定します。
Al.exe を使用して、コンソール アプリケーションを実行する myAssembly.exe という名前のアセンブリを作成する例を次に示します。 このアプリケーションは、Client.netmodule と Stringer.netmodule の 2 つのモジュール、およびアセンブリ メタデータだけを格納する実行可能ファイル myAssembly.exe で構成されます。 アセンブリのエントリ ポイントは MainClientApp クラスの Main メソッドで、Client.dll 内に配置されています。
al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe
MSIL 逆アセンブラー (Ildasm.exe) を使用すると、アセンブリの内容を調査したり、ファイルがアセンブリであるかモジュールであるかを判断したりできます。