マルチファイル アセンブリの例
このセクションでは、マルチファイル アセンブリの作成に必要な手順を、例を挙げて説明します。
手順 1: ほかのファイルによって参照される名前空間を含むファイルのコンパイル
この例では、最初に Stringer
ファイルの単純なコードを示します。Stringer
には、myStringer
名前空間と Stringer
クラスがあります。Stringer
クラスには、コンソールに 1 つの行を書き込む StringerMethod
メソッドが含まれます。
' Assembly building example in the .NET Framework SDK.
Imports System
Namespace myStringer
Public Class Stringer
Public Sub StringerMethod()
Console.WriteLine("This is a line from StringerMethod.")
End Sub
End Class
End Namespace
[C#]
// Assembly building example in the .NET Framework SDK.
using System;
namespace myStringer
{
public class Stringer
{
public void StringerMethod()
{
System.Console.WriteLine("This is a line from StringerMethod.");
}
}
}
このコードをコンパイルするには、次のコマンドを使用します。
vbc /t:module Stringer.vb
[C#]
csc /t:module Stringer.cs
module パラメータと /t: コンパイラ オプションを指定すると、ファイルはアセンブリではなくモジュールとしてコンパイルされます。コンパイラは、アセンブリに追加できる Stringer.netmodule
モジュールを生成します。
手順 2: ほかのモジュールへの参照を含むモジュールのコンパイル
この手順では、/addmodule コンパイラ オプションを使用します。この例では、Client
コード モジュールに、手順 1 で作成した Stringer.dll
モジュール内のメソッドを参照するエントリ ポイント Main
メソッドがあります。
Client
のコード例を次に示します。
Imports System
Imports myStringer 'The namespace created in Stringer.netmodule.
Class MainClientApp
' Shared method Main is the entry point method.
Public Shared Sub Main()
Dim myStringInstance As New Stringer()
Console.WriteLine("Client code executes")
'myStringComp.Stringer()
myStringInstance.StringerMethod()
End Sub
End Class
[C#]
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");
//myStringComp.Stringer();
myStringInstance.StringerMethod();
}
}
このコードをコンパイルするには、次のコマンドを使用します。
vbc /addmodule:Stringer.netmodule /t:module Client.vb
[C#]
csc /addmodule:Stringer.netmodule /t:module Client.cs
このモジュールは後の手順でアセンブリに追加するため、/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 [C#] csc /t:module Stringer.cs csc Client.cs /addmodule:Stringer.netmodule
1 回のコンパイルで、2 ファイルのアセンブリを作成する。
vbc /out:Stringer.netmodule Stringer.vb /out:Client.exe Client.vb [C#] csc /out:Client.exe Client.cs /out:Stringer.netmodule Stringer.cs
手順 3: アセンブリ リンカを使用したマルチファイル アセンブリの作成
アセンブリ リンカ (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) を使用すると、アセンブリの内容を調査したり、ファイルがアセンブリであるかモジュールであるかを判断したりできます。
参照
アセンブリの作成 | アセンブリの内容の表示 | ランタイムがアセンブリを検索する方法 | マルチファイル アセンブリの構築