.netmodule 入力ファイルの形式の選択
/clr を指定してコンパイルされた MSIL .obj ファイルは、.netmodule ファイルとして使用することもできます。.obj ファイルにはメタデータおよびネイティブ シンボルが含まれます。..netmodules にはメタデータだけが含まれます。
/addmodule コンパイラ オプションを使用して、MSIL .obj ファイルを他の Visual Studio コンパイラに渡すことができます。ただし、.obj ファイルは生成されるアセンブリの一部になるため、アセンブリに含めて出荷する必要があります。たとえば、Visual C# と Visual Basic には /addmodule コンパイラ オプションがあります。
[!メモ]
ほとんどの場合、リンカーに、.net モジュールを作成したコンパイラから .obj ファイルを渡す必要があります。ただし、.netmodule が /clr:pure を指定して作成された場合は除きます。.dll または .netmodule MSIL モジュール ファイルをリンカーに渡すと、LNK1107 が発生する場合があります。
.obj ファイルとそれに関連付けられた .h ファイル (これらのファイルは #include を使ってソースから参照) を使用すると、C++ アプリケーションはモジュール内のネイティブ型を使用できます。これに対して .netmodule ファイルでは、C++ アプリケーションが使用できるのはマネージ型だけです。.obj ファイルを #using に渡そうとすると、ネイティブ型に関する情報が使用できなくなります。代わりに .obj ファイルの .h ファイルを #include に渡してください。
Visual C++ 以外の Visual Studio コンパイラで使用できるのは、モジュールのマネージ型だけです。
次の内容を参照し、Visual C++ リンカーへのモジュール入力として .netmodule または .obj ファイルのどちらを使用する必要があるかを判断してください。
Visual C++ 以外の Visual Studio コンパイラを使用してモジュールをビルドする場合は、.netmodule を生成し、その .netmodule をリンカーへの入力として使用します。
Visual C++ コンパイラを使用してモジュールを生成し、そのモジュールを使用してライブラリ以外のものをビルドする場合は、コンパイラが生成した .obj ファイルをリンカーへのモジュール入力として使用します。.netmodule ファイルを入力として使用しないでください。
モジュールを使用してネイティブ ライブラリ (マネージ ライブラリではない) をビルドする場合は、.obj ファイルをリンカーへのモジュール入力として使用して、.lib ライブラリ ファイルを生成します。
モジュールを使用してマネージ ライブラリをビルドし、リンカーへのすべてのモジュール入力が検証可能な場合 (/clr:safe を指定して生成される場合) は、.obj ファイルをリンカーへのモジュール入力として使用して、.dll (アセンブリ) または .netmodule (モジュール) ライブラリ ファイルを生成します。
モジュールを使用してマネージ ライブラリをビルドし、リンカーへのすべてのモジュール入力が /clr:pure または /clr:safe を指定して生成される場合は、ライブラリのマネージ型を公開するだけが目的であれば、.obj ファイルをリンカーへのモジュール入力として使用して、.dll (アセンブリ) または .netmodule (モジュール) を生成します。ライブラリのマネージ型を公開し、C++ アプリケーションがライブラリのネイティブ型を使用できるようにする場合は、ライブラリはライブラリ コンポーネント モジュールの .obj ファイルから構成されます。#include を使用して各モジュールの .h ファイルをソース コードから参照できるように、これらのファイルも共に出荷します。
モジュールを使用してマネージ ライブラリをビルドし、リンカーへのモジュール入力の 1 つ以上が /clr だけを指定して生成される場合は、.obj ファイルをリンカーへのモジュール入力として使用して、.dll (アセンブリ) を生成します。ライブラリのマネージ型を公開し、C++ アプリケーションがライブラリのネイティブ型を使用できるようにする場合は、ライブラリはライブラリ コンポーネント モジュールの .obj ファイルから構成されます。#include を使用して各モジュールの .h ファイルをソース コードから参照できるように、これらのファイルも共に出荷します。