次の方法で共有


マルチファイル アセンブリの例

このセクションでは、マルチファイル アセンブリの作成に必要な手順を、例を挙げて説明します。

手順 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.netmoduleStringer.netmodule の 2 つのモジュール、およびアセンブリ メタデータだけを格納する実行可能ファイル myAssembly.exe で構成されます。アセンブリのエントリ ポイントは MainClientApp クラスの Main メソッドで、Client.dll 内に配置されています。

al Client.netmodule Stringer.netmodule /main:MainClientApp.Main /out:myAssembly.exe /target:exe 

MSIL 逆アセンブラ (Ildasm.exe) を使用すると、アセンブリの内容を調査したり、ファイルがアセンブリであるかモジュールであるかを判断したりできます。

参照

アセンブリの作成 | アセンブリの内容の表示 | ランタイムがアセンブリを検索する方法 | マルチファイル アセンブリの構築