2012-02-14 17 views
3

私はオープンソースを公開しようとしているlibを書いています。これはMS Unityを使用します。ユニティDLL(Microsoft.Practices.Unity.dll & Microsoft.Practices.ServiceLocation.dll)をILMergeを使用してOSライブラリにマージする必要があります。オープンソース配布のために別々のDLLを1つのアセンブリにマージする

+2

なぜReadmeファイルにUnityが前提条件であると言わないのですか?また、UnityライセンスがサードパーティのDLLにマージしてそのような方法で配布することを許可しているかどうかはわかりません。 – abatishchev

+1

私はそれが最良のアプローチだと思います。私に関係する唯一のことは、消費者が互換性のある単一性を得ることができない限り、図書館は役に立たなくなるということです。これはよくある問題だと思います。私はユニティのリリースバージョンを使用しており、ライブラリは正確なバージョンでそれを参照するので、消費者は単に彼らが何をしているのかを知る必要があります。 –

+1

私はそれが問題であることに同意します。企業環境の場合、個人消費者などの場合にはそれほど意味がありません。 – abatishchev

答えて

2

私はlibとMS Unityをマージしません。

MS UnityはMs-PLライセンスの下にあるので、私はMS Unityアセンブリの良いバージョンをlibと共に出荷します。 the license of MS Unityreadme.txtファイルを含めることを忘れないでください。

+0

優秀、ありがとうございます。 –

0

NuGetパッケージマネージャを使ってUnityの正確なバージョンを取得する方法を説明することをお勧めします。エンドユーザーの頭痛を軽減するはずです。

また、互換性のあるUnityバージョンリストを指定してUnityダウンロードページへのリンクを提供します。

1

サードパーティのライブラリを自分のものにマージすることはお勧めしません。 理由は簡単です。これを行うことで、ユーザーはこれらのサードパーティ製ライブラリの別のバージョン(またはおそらくカスタム)を使用することを制限します。

解決策へのNuGetパッケージの参照が含まれている限り、これらのDLLをライブラリと共に出荷することをお勧めします(オープンソースライブラリの場合)。 これはサードパーティのライブラリにはおすすめですが、IoCコンテナ、ロガー、一般的に使用されているその他の懸念事項については、一般的にユーザーに柔軟性を提供したいと考えています。

あなたのライブラリが多くの人に使用されることになっている場合は、誰かが別のコンテナを使用することを好むだろうと予測することができます。 恐らく、これらの他のコンテナは、ユーザが自分の使っているものをあきらめて、代わりにUnityを使用したり、2つのコンテナをサポートしたりすることができます。 これらの依存関係を抽象化し、潜在的なユーザーに選択肢を与えることをお勧めします。

たとえば、あなたのライブラリでコンテナから必要なすべてのメソッド(解決、登録など)を使ってインタフェースIContainerを定義することができます。別の別のDLLを実装することもできます:SuperLibrary.Container.Unity.dllこれは、Unityを介して動作する実装IContainerを含みます。 私のプロジェクトであなたのライブラリと一緒にAutofacを使いたいのであれば、私自身のSuperLibrary.Container.Autofac.dllを作成することができます。あなたのIContainerの実装には1つか2つのファイルが含まれていて、私のAutofacを使用し、Unityについて何も知る必要はありません:)

あなたも、あなたが十分に良くなることを決めるならば、Autofac、Unity、Unity2、 StructureMap、Spring.NETなどを使用して、使用するライブラリの選択肢をユーザーに提供します。

関連する問題