2 年前に、たとえば .NET クラス ライブラリを作成したとします。このmylib.dll
ライブラリは、foo.dll
オープン ソース化され、MIT ライセンスを取得している .
多くの顧客が、私のライブラリとその依存関係アセンブリを使用していました。パッケージmylib.dll
付きでしたfoo.dll
。
日が経ち、 の作成者はfoo.dll
API を壊し、今では新しいバージョンのライブラリをデプロイしました。この新しいバージョンには、古いバージョンに含まれていた型のほとんどが含まれていますが、一部のメソッドが欠落しているか、変更されています。
問題
foo.dll
一部の潜在的な消費者は、自分のアプリケーションで新しいバージョンを既に使用しています。私がそれらを供給するmylib.dll
と、彼らはそれを使用できません。古いメソッドとシグネチャを備えmylib.dll
た古いバージョンの が必要なため、ビルドを成功させることさえできません。foo.dll
この問題を克服するにはどうすればよいですか?
この問題が再び発生しないように、前方互換性のあるソリューションが必要です。だから私はいくつかのことを考えました:
- の新しいバージョンを使用するようにソース コードを更新します
foo.dll
。しかし、それには多くの手間と時間がかかります。さらに、この問題はいつか再び発生する可能性があるため、前方互換性はありません。 - の正確なバージョンのソースを持っているので
foo.dll
、名前空間を簡単に変更して全体を再構築できるかもしれません。このようにして、自分のバージョンの を楽しむことができます。これfoo.dll
はライセンスが MIT であるため合法です。変更されたアセンブリmylib.foo.dll
などに名前を付けることができます。ILMerge
のようなものを使用して全体をマージすることもできmylib.merged.dll
ます。 mylib.dll
必要な機能foo.dll
がインターフェースと実装に分離されるように再設計します。エンジニアリングに関しては、これが最も洗練されたソリューションです。時間的には大惨事であり、真の解決策とは言えません。
私の質問
上記の #2 を達成するために、特定のソース コードの名前空間を変更する簡単な方法はありますか?