複数のモジュールを作成し、テーマを1つのdllにリンクする方法の例:
csc /t:module RarelyUsedTypes.cs
csc /out:AllTypes.dll /t:library /addmodule:RarelyUsedTypes.netmodule AllTypes.cs
詳細については、C#を介したRichterの本CLRを参照してください。
VisualStudioのこのプロセスを自動化できます。
プロジェクトごとに、ネットモジュールまたはアセンブリを作成し、それらすべてを1つのアセンブリにコンパイル/マージします。
最初の選択肢。これはJayR.Wrenによって提案されました。
これはかわいいハックですが、CSCとVBCの両方が/target:module
と/addmodule
オプションをサポートしているため、シェルスクリプトまたはファイルを作成するだけで、ILMergeなしで実際にこれを行うことができます。
Visual Studioは「netmodule」タイプをサポートしていませんが、MSBuildはサポートしています。
VBプロジェクトをソリューションに追加します。プロジェクトをアンロードし、プロジェクトファイルを編集します。
OutputTypeをモジュールに変更します。
<OutputType>module</OutputType>
目的のプロジェクトへの参照を追加する代わりに、モジュールを追加します。残念ながら、ここでもVStudioは失敗しますが、MSBUILDは問題なく動作します。プロジェクトをアンロードし、プロジェクトファイルを編集します。AddModulesincludeディレクティブを使用してアイテムグループを追加します。
<ItemGroup><AddModules Include="..\VbXml\bin\Debug\VbXml.netmodule" /></ItemGroup>
/addmodule
これにより、Studioが管理する参照アイテムグループと同様に、msbuildにディレクティブを使用するようにCSCに指示します。
主な欠点:追加されたモジュールにVisualStudioIntellisenseがありません。すでにリファレンスがありますが、モジュールがないのは残念です。[更新:@ Ark-kunが指摘したように、Visual Studioは.netmodule
プロジェクトを参照し、Intellisenseを使用できます。出力タイプを変更する前に、プロジェクト参照を追加するだけです。]
SharpDevelopには最初のステップがありますが、2番目のステップである「モジュールの追加」GUIは、SD2.0以降優先度の低いアイテムとして開かれています。
2番目の選択肢。このすばらしい記事(Scott Hanselmanによる)では、VisualStudioを使用している場合にアセンブリを自動的に統合する方法について説明しています。最初の選択肢とは異なり、 IntelliSenseをサポートします。