2017-02-16 21 views
1

in my c#project私はサードパーティ製ソフトウェアのタイプライブラリを使用して、そのソフトウェアと通信しています。しかし、誰かがサードパーティのソフトウェアの古いバージョンを使用すると、別のタイプライブラリ(古いもの)をロードする必要があります。これをどのように処理できますか?異なるバージョンの異なるタイプライブラリ

と次の事すべてのタイプライブラリで私の実際のコードのdoesntの仕事ので、いくつかの変更であってもよいこと、である(多分!)

+0

「タイプライブラリ」とは、COMライブラリを意味しますか?それがガイドラインに従って適切に設計されていれば、必要な最低バージョンのインタフェースを使用して、それを使用し、必要なジャグリングは不要です。 – Luaan

答えて

2

まず、あなたはの機能をラップインタフェースを作成する必要があります第三者図書館。そうした場合、そのインターフェースの2つの実装を持つことができます。第三者図書館のバージョンごとに1つ。ライブラリをロードするとあなたの問題を解決するために

public interface IWrapThirdParty { 
    void ThirdPartyMethodOne(); 
    int ThirdPartyMethodTwo(); 
} 

public class ThirdPartyV1Wrapper : IWrapThirdParty { 
    public void ThirdPartyMethodOne() { 
    ThirdPartyV1 obj = new ThirdPartyV1(); 
    obj.ThirdPartyMethodOne(); 
    } 
    public int ThirdPartyMethodTwo(){ 
    ThirdPartyV1 obj = new ThirdPartyV1(); 
    return obj.ThirdPartyMethodTwo(); 
    } 
} 

:uは考え出した後

あなたはuがロードしたいバージョン、Assembly.Load()メソッドを使用することができます。ただし、アセンブリを2回ロードすることは絶対に避けてください。

https://msdn.microsoft.com/en-us/library/system.reflection.assembly.load(v=vs.110).aspx


アセンブリが出回っu)は(現在のAppDomainにロードされているすべてのアセンブリを返します方法を、AppDomain.CurrentDomain.GetAssembliesを使用することができますロードされているかどうかを確認するには。

https://msdn.microsoft.com/en-us/library/system.appdomain.getassemblies(v=vs.110).aspx

+0

いいえ、私は "ThirdPartyV2Wrapper、ThirdPartyV3Wrapper"のような各バージョンのラッパーを実装する必要がありますか? –

+0

ええと、atleastそれは私が第三者図書館で働いているとき、私がしていることです。私のためにかなりうまく動作します:) –

+0

私はあなたが答えを受け入れる場合、私は幸せになるあなたの質問に答えることができた:) –

関連する問題