in my c#project私はサードパーティ製ソフトウェアのタイプライブラリを使用して、そのソフトウェアと通信しています。しかし、誰かがサードパーティのソフトウェアの古いバージョンを使用すると、別のタイプライブラリ(古いもの)をロードする必要があります。これをどのように処理できますか?異なるバージョンの異なるタイプライブラリ
と次の事すべてのタイプライブラリで私の実際のコードのdoesntの仕事ので、いくつかの変更であってもよいこと、である(多分!)
in my c#project私はサードパーティ製ソフトウェアのタイプライブラリを使用して、そのソフトウェアと通信しています。しかし、誰かがサードパーティのソフトウェアの古いバージョンを使用すると、別のタイプライブラリ(古いもの)をロードする必要があります。これをどのように処理できますか?異なるバージョンの異なるタイプライブラリ
と次の事すべてのタイプライブラリで私の実際のコードのdoesntの仕事ので、いくつかの変更であってもよいこと、である(多分!)
まず、あなたはの機能をラップインタフェースを作成する必要があります第三者図書館。そうした場合、そのインターフェースの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
いいえ、私は "ThirdPartyV2Wrapper、ThirdPartyV3Wrapper"のような各バージョンのラッパーを実装する必要がありますか? –
ええと、atleastそれは私が第三者図書館で働いているとき、私がしていることです。私のためにかなりうまく動作します:) –
私はあなたが答えを受け入れる場合、私は幸せになるあなたの質問に答えることができた:) –
「タイプライブラリ」とは、COMライブラリを意味しますか?それがガイドラインに従って適切に設計されていれば、必要な最低バージョンのインタフェースを使用して、それを使用し、必要なジャグリングは不要です。 – Luaan