2016-01-27 119 views
2

我有一个程序集称为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我认为我使用的代码是相同的,只是更新一点(如果我错了,请纠正我)。

+0

只是强名和GAC他们,那么你可以只添加引用到两者。没有时髦的反射需要。 http://stackoverflow.com/questions/2460542/using-different-versions-of-the-same-assembly-in-the-same-folder – MickyD

+0

派对晚了,但我有类似的问题,我不得不加载来自同一个文件夹(不同名称)的同一个dll的2个实例,对我来说有效的是来自Activator.CreateInstanceFrom(string,string)的'ObjectHandle',然后是'Unwrap()'来获取对象。 [MSDN文档](https://msdn.microsoft.com/en-us/library/1fce0hc8(v = vs.110).aspx) – XAMlMAX

回答

2

在你的回答中,你对这两个对象都使用了Activator.CreateInstance--这是使用全局注册的东西。我相信从特定程序集加载的类型不足以执行此操作。

在您链接答案,组件使用Assembly.LoadFile而不是LoadFromCreateInstance加载的呼吁装配的实例,而不是使用静态Activator.CreateInstance。你试过这个吗?

var asm1 = Assembly.LoadFile("dir1\asm.dll"); 
var asm2 = Assembly.LoadFile("dir2\asm.dll"); 

MyObject myObject1 = (MyObject)asm1.CreateInstance("myClassIWantToInstantiate"); 
MyObject myObject2 = (MyObject)asm2.CreateInstance("myClassIWantToInstantiate"); 
+0

不,我只是检查它。看起来问题出在'var asm = Assembly.LoadFrom(assemblyFile);'因为这里第二个调用仍然返回相同的程序集(即使传入的文件字符串不同) –

+0

...这意味着在我的代码中调用'var asm1 = Assembly.LoadFrom(“dir1 \ asm.dll”);''var var asm2 = Assembly.LoadFrom(“dir2 \ asm.dll”);'返回相同的程序集。 –

+1

链接的答案使用Assembly.LoadFile而不是Assembly.LoadFrom - 你试过吗? – Richard

相关问题