BT

ILMergeを使ったInternal化における注意

| 作者: Abel Avram フォローする 9 人のフォロワー , 翻訳者 尾崎 義尚 フォローする 0 人のフォロワー 投稿日 2010年8月19日. 推定読書時間: 2 分 |

原文(投稿日:2010/08/03)へのリンク

ILMergeは、複数のアセンブリをひとつのアセンブリに統合することができ、型の可視性をpublicからinternalに変更することができる.NETのユーティリティである。これは、作成されたアセンブリがどのように使われるようになるかによって、肯定的にも否定的にもすることができる。

ILMergeは、誰かが作成したフレームワークやアプリケーションとそれが依存するすべてのフレームワークやライブラリを一緒にすることで、ユーザから隠すことができ、インストールして使うことが簡単にできるようになる。ILMergeは、コマンドプロンプトやプログラムから使用することができる。設定可能なプロパティのひとつに、型を非表示であるinternalにするInternalizeがある。

マイクロソフトのソリューションアーキテクトMVPでありNServiceBusの父であるUdi Dahan氏は、バージョン1.9でILMergeを使用して、NServiceBusが依存するすべてアセンブリを統合したが、いかなる型もinternalize(Internal化)しなかった。

すべてのサードパーティの型は、開発者がNServiceBusを使うときに公開される。これは、マージされたものと同じバージョンのライブラリを仕様する時には問題が発生しない。残念ながら、Castleのようなライブラリを使用する開発者は、「バージョニング地獄」としても知られるバージョン競合が発生することがあります。

NServiceBus 2.0で、Dahan氏は、Internal化の機能を使い始めた。しかし、彼はすべての型をInternal化するべきでないと述べている。

たとえばNServiceBusは、長期実行プロセス(sagasと呼ばれる)の状態を永続化の内部でNHibernateを使用しています。そして、私たちはNServiceBus上で開発者がやりたいと思うことをなにとも競合することなく行えるようにして欲しいと考えています。NHibernateの作業において、ただひとつ必要なことは、環境の構成において、NHibernate.Cfg.MappingSchema名前空間のすべての型が公開されていることです。

ユーザの一部は、バンドルされているライブラリのAPIにアクセスしたいと考えるだろうが、彼らはすべてをinternalにしたいとは考えないだろう。そのため、いくつかは彼らのように型を開放する方がよいだろう。NServiceBusは、現実的な解決策として2つのビルドを提供している。ひとつは、一般的なユーザが望んでいるフレームワークのみを使うもの、そして他のビルドは、コアバイナリに含まれていて、完全なコントロールを提供するものである。

ILMergeは、.NET Framework 2.0以降とすべてのマージする.NETアセンブリは、.NET 1.0/1.1で作成されている必要がある。ツールは、Windows上でのみ動作して、RotorやMonoはサポートされていない。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT