ILMerge を使用して、いくつかのサード パーティ アセンブリを含むいくつかの .NET アセンブリをマージしています。そうして以来、いくつかのエラーが発生しましたが、それらはすべて、型定義がそれらが定義されているアセンブリに関連付けられているという事実に帰着します。
簡単な例は、私の App.config の log4net config セクション定義です。マージされたアセンブリにマージされると log4net アセンブリが存在しないため、 type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" を使用します。大したことではありませんが、アセンブリ名をマージされたアセンブリに変更すると、正常に動作します。
もう少し複雑な例は、バイナリのシリアル化された型です。私のシステムでは、バイナリ シリアル化を使用してプロセス間で特定のオブジェクトを送信しています。シリアル化可能なオブジェクトはすべて、他のすべてのプロジェクトが参照する共通のアセンブリで定義されます。デフォルトのバイナリ シリアル化を使用していましたが、オブジェクトをシリアル化したマージされたアセンブリが見つからないというエラーでオブジェクトを逆シリアル化するときに失敗し始めました。繰り返しますが、大したことではありませんが、指定されたアセンブリだけでなく、読み込まれたアセンブリの型を検索するカスタム SerializationBinder を実装しました。
シリアル化された型が他のシリアル化可能な型を参照する場合、前の例はより複雑になります。私はますます対処が難しくなっている問題に遭遇し続けてきました。
ここで私が理解しようとしている点は、.NET 型システムと ILMerge がうまく連携していないように見えるということです。この問題をどのように解決したかについて、経験のある人はいますか? .NET ランタイムに、型がどのアセンブリにあるべきかを気にせず、どこかを探すだけでよいと伝えることはできますか?
注: アセンブリをマージする理由を尋ねる返信はしないでください。それはこの質問のポイントではありません。