例:
csc /t:module RarelyUsedTypes.cs
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs
詳細についてはリヒターの本CLR via C#を参照してください。
Visual Studioのこのプロセスを自動化することができます。
プロジェクトごとに、ネットモジュールまたはアセンブリを作成し、それらをすべて1つのアセンブリにコンパイル/マージします。
第1の代替案。これはJay R. Wrenによって提案された:
これはかわいいハックですが、CSCとVBCとの両方/target:module
と/addmodule
オプションをサポートしている、あなたは実際にはシェルスクリプトを使用してILMergeせずにこれを行うことができますまたはファイルを作成します。
Visual Studioは "netmodule"タイプをサポートしていませんが、MSBuildはサポートしています。
ソリューションにVBプロジェクトを追加します。プロジェクトをアンロードし、プロジェクトファイルを編集します。
変更OUTPUTTYPE、モジュールに:
<OutputType>module</OutputType>
代わりの目的のプロジェクトへの参照を追加することを、我々はモジュールを追加します。悲しいことに、ここでもVStudioは失敗しますが、MSBUILDはうまく動作します。プロジェクトをアンロードし、プロジェクトファイルを編集します。 AddModulesインクルードディレクティブを含むアイテムグループを追加します。
<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>
これは単にメーカーが管理しない参照項目のグループのように、/addmodule
ディレクティブを使用するCSCを伝えるためのMSBuildを教えてくれます。
主な欠点:追加されたモジュールのVisual Studio Intellisenseはありません。私たちはすでにリファレンスを持っていますが、私たちはモジュールを持っていません。
[更新:@ Ark-kunは、Visual Studioは.netmodule
プロジェクトを参照し、Intellisenseを参照できることを指摘しました。 ]
SharpDevelopには最初のステップがありますが、2番目のステップである「Add Module」GUIはSD 2.0以降の優先度の低いアイテムとして公開されています。
第2の代替案。このgreat article(Scott Hanselman)は、Visual Studioを使用している場合、自動的にアセンブリをどのように巨大化するかについて説明しています。は、最初の代替品とは異なり、IntelliSenseサポート
を提供します。
ネットモジュールは反対です。私も彼らに騙されました。ネットモジュールを使用すると、アセンブリを複数のファイルに分割することができます(たとえば、それらを個別にロードすることができます)。それらは通常の参照されたdllに非常に似ています。あなたのリンクステートネットモジュールは "マルチファイルアセンブリ"を作成することを可能にします。 –