2 年前に、たとえば .NET クラス ライブラリを作成したとします。このmylib.dllライブラリは、foo.dllオープン ソース化され、MIT ライセンスを取得している .
多くの顧客が、私のライブラリとその依存関係アセンブリを使用していました。パッケージmylib.dll付きでしたfoo.dll。
日が経ち、 の作成者はfoo.dllAPI を壊し、今では新しいバージョンのライブラリをデプロイしました。この新しいバージョンには、古いバージョンに含まれていた型のほとんどが含まれていますが、一部のメソッドが欠落しているか、変更されています。
問題
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 を達成するために、特定のソース コードの名前空間を変更する簡単な方法はありますか?