我有一个程序集称为asm.dll。加载相同的程序集两次,但版本不同
该组件有1.0.0.0版(设置的AssemblyInfo.cs内)
然后,我需要做的做在组件(仍然asm.dll)一些代码的修改,推进版本2.0.0.0并重新构建它。
现在,我有两个名为asm.dll的文件,它们在代码修改和版本号方面有所不同。
如何在运行时加载这两个文件?
附录:
现在我尝试以下:
var asm1 = Assembly.LoadFrom("dir1\asm.dll");
var asm2 = Assembly.LoadFrom("dir2\asm.dll");
var types1 = asm1.GetTypes();
var types2 = asm2.GetTypes();
Type type1 = types1.First<Type>(t => t.Name.Equals("myClassIWantToInstantiate"));
Type type2 = types2.First<Type>(t => t.Name.Equals("myClassIWantToInstantiate"));
MyObject myObject1 = (MyObject1)Activator.CreateInstance(type, new object[] { });
MyObject myObject2 = (MyObject2)Activator.CreateInstance(type, new object[] { });
,但我得到了以下行为:
到
Activator.CreateInstance(...)
第一次调用正确返回请求实例为myObject1
第二次调用
Activator.CreateInstance(...)
收益再次myObject1
代替myObject2
代码编译,程序运行没有异常或观察到的问题,但我不明白
myObject2
我所知道的this answer我认为我使用的代码是相同的,只是更新一点(如果我错了,请纠正我)。
只是强名和GAC他们,那么你可以只添加引用到两者。没有时髦的反射需要。 http://stackoverflow.com/questions/2460542/using-different-versions-of-the-same-assembly-in-the-same-folder – MickyD
派对晚了,但我有类似的问题,我不得不加载来自同一个文件夹(不同名称)的同一个dll的2个实例,对我来说有效的是来自Activator.CreateInstanceFrom(string,string)的'ObjectHandle',然后是'Unwrap()'来获取对象。 [MSDN文档](https://msdn.microsoft.com/en-us/library/1fce0hc8(v = vs.110).aspx) – XAMlMAX