2012-01-03 3 views
1

本当にこれが意味をなされることを願っています。私は、私が考えることができるすべてについて、運がなくても試しました。分岐コードと競合するアセンブリバージョン....これに対処するには?

は、ここに私の状況です:いくつかのチームはに貢献し、単一のコードベースがありました

...しかし、目標とチームが発散し始めたの焦点を当てています。何ヶ月も前に、コードを分岐することに決めました。

バージョン バージョンB

事がAとBは、独立した変化の数ヶ月後に、今異なっている一方で、ある - 彼らはまだ私の問題、クラス/インタフェースへのより適切な、ロジックの多くを共有し、 /オブジェクト名と名前空間。私たちはバージョンB.バージョンBの内側に何かを活用しようとしているバージョンのA.と連携

は、外部ライブラリを使用して、この非常に複雑で、困難な、時間のかかる事を書いた - しかし、今それが聞こえた

素晴らしい取り組んでいます簡単です。バージョンBには、このロジックをすべてカプセル化したプロジェクトがあり、アセンブリ(.dll)への参照を追加するだけです。しかし、アセンブリはバージョンBで見つかった他の多くのプロジェクトに依存しています - つまり、バージョンAではALSOですが、AとBの数多くの違いのために失敗します。たとえば、私が追加したバージョンBのDLLは、iInterface1が文字列X - バージョンAでは同じ名前空間にiInterface1がありますが、既にEnum Xがあります。

すべてのDLLが/ binフォルダにコピーされてしまいます。プロジェクトBのアセンブリで使用される1つのバージョンをカプセル化します。私はAssemblyResolveイベントを聞いて、それを/ binのサブフォルダに配置しようとしましたが、それがどのように役立つのか理解できません。アセンブリを一度解決すると、再び起動しませんが、複数回リダイレクトする必要があります。

これらを両方ともGACに追加することは選択できません。しかし、それがそれを行う唯一の合理的な方法かもしれないと思う。

誰か私にある方向を教えてもらえますか? ILMergeは私がここで使うことができるものでしょうか?

+2

私はあなたの痛みを感じます。分岐は地獄への道の第一歩です。 – DOK

+1

分岐した後は、あなたの毎日の祈りをよく言います。そして、いや、あなたを助けません。どちらもうまくいきません。あなたdooooomedしています。あなたが新しいプロジェクトXに再利用したいコードを抽出できるようになるまで、バージョンAとバージョンBをリファクタリングしない限り、*クリーン*ソリューション(assemblyresolveのものは私を冷静にし、GACはそれほど優れていない)プロジェクトXをバージョンAとバージョンBの両方で使用できるように維持する必要があります。 – stmax

答えて

1

アセンブリBを別のAppDomain(別のディレクトリに保存されているファイル)にロードして、メインアプリケーションからAppDomainを呼び出すことができますか?

0

これが最適なルートであるかどうかはわかりませんが、最終的にはWCFを使用して、2つのプロセスが互いに通信できるようになりました。つまり、同じボックスの名前付きパイプです。これにより、アセンブリのバージョン管理の問題は完全に回避されました。

関連する問題