それらを別々のフォルダーに保管しても問題ありません。を使用して、適切なインストルメント プロキシ アセンブリを自分でロードしますAssembly.LoadFrom
。次に、リフレクションを使用してそのアセンブリからクラスのインスタンスを作成し、呼び出しを行います。
Assembly assm = Assembly.LoadFrom("c:\\Versions\\Version01\\instrument-proxy.dll");
Type yourClassType = assm.GetType("YourClass");
object yourClassObj = Activator.CreateInstance(yourClassType);
object Result = yourClassType.InvokeMember("DoSomething",
BindingFlags.Default | BindingFlags.InvokeMethod,
null,
yourClassObj,
args);
リフレクション呼び出しを回避するInvokeMember
には、インターフェースで試すことができます:
Assembly assm = Assembly.LoadFrom("c:\\Versions\\Version01\\instrument-proxy.dll");
Type yourClassType = assm.GetType("YourClass");
YourInterface interf = (YourInterface)Activator.CreateInstance(yourClassType);
interf.DoSomething();
インターフェイスは、あなたから参照できる別のアセンブリにある必要がありますplatform
。すべてinstrument-proxies
を同じバージョンのインターフェイス アセンブリに対してコンパイルする必要があります。
インストゥルメント プロキシが管理されていないものを見つけられないInstrument.dll
場合は、最初に使用する前に明示的にロードできます。
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
IntPtr pDll = LoadLibrary(@"PathTo_Instrument.dll");
完了したら、解放/アンロードします。
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);