module、マルチファイルアセンブリ
プログラムの構成単位
C++のケースでは、.cpp -> .obj とコンパイルされます。
.obj が得られれば、Fortranなどの他のコンパイラの出力でもリンクできる可能性があります。
しかし、C#のコンパイラである csc は、.obj を作りません。
csc の出力形式は、/t(arget):library のように指定します。
ターゲットはlibrary(.dll)、module(.netmodule)、exe(.exe)、winexe(.exe)になります。
プログラムを分割して作成する場合、コンパイル済みでリンク可能なのは、この単位で、「アセンブリ」単位と言うことになります。
module
csc /t:module assem1.cs
として、assem1.netmodule が作られます。
.netmodule は、後述のマルチファイルアセンブリの入力(構成要素)などで注目しました。
しかし、DLL とほとんど区別がないようです。
含まれる内容が同じで、DLLと同様実行も可能です。
マルチファイルアセンブリ
al /t:library assem1.netmodule assem2.netmodule /out:new.dll
にして、2つのDLLを1つにできると考えましたが間違いでした。
このコマンドは、new.dll に、2つの .netmodule のファイル名を記録するだけでした。
実行には、.netmodule ファイルが必要です。
この情報にパスは含まれないので、配置を変更する目的にも使用できません。
|