将它们保存在单独的文件夹中会很好。您可以使用自己加载正确的仪器代理程序集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);