概要

.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 を使うわけではないんだけど。)

アセンブリを埋め込みリソースにする

アセンブリを「埋め込みリソース」としてまとめたいアセンブリに埋め込んでしまい、解決は AppDomain.CurrentDomain.AssemblyResolve イベントで動的に行う。

所感

  • 試したらうまくいった。
  • Bve 5 / 6 系で .NET Framework の使用 Ver. が違うので、埋め込むアセンブリもビルドごとに別けてみたら、これもうまくいった。
  • .csproj も最低限の改造で良かった。これでいい。