概要
.NET Framework 環境下にて、複数のクラスライブラリを1つのクラスライブラリへ束ねる方法を紹介する。
動機
PluginOrganizer では、外部のライブラリを依存させているが、実装当時の時間的制約によりライブラリのソースコードを本体に取り込んでビルドする方法を採っている。
実際には外部のライブラリを依存させつつ本体に1つに束ねる方法があるので、どのような方法が有効であるのか考えることとした。
手段
ILMerge
https://github.com/dotnet/ILMerge
プロジェクト中で参照している CIL の複数のアセンブリを、恐らく「ビルド後イベント」で 1つ のアセンブリに統合する。
ILMerge is a utility that merges multiple .NET assemblies into a single assembly. It is freely available for use and is available as a NuGet package.
所感
- 前に試してうまくいかなかった。
- WPF アプリケーションではうまくいかないようだ。( WPF を使うわけではないんだけど。)
アセンブリを埋め込みリソースにする
- WPFアプリケーションをEXEひとつにまとめる - secretbase.log@cointossさん
- Merging dlls into a single .exe with wpf - stackoverflow
アセンブリを「埋め込みリソース」としてまとめたいアセンブリに埋め込んでしまい、解決は AppDomain.CurrentDomain.AssemblyResolve
イベントで動的に行う。
所感
- 試したらうまくいった。
- Bve 5 / 6 系で .NET Framework の使用 Ver. が違うので、埋め込むアセンブリもビルドごとに別けてみたら、これもうまくいった。
- .csproj も最低限の改造で良かった。これでいい。