c# - 两次加载相同的程序集但版本不同

标签 c# .net runtime version .net-assembly

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

最佳答案

在您的答案中,您正在为两个对象使用 Activator.CreateInstance - 这是使用全局注册的任何内容。我相信从特定程序集加载的类型不足以做到这一点。

在您链接的答案中,使用 Assembly.LoadFile 而不是 LoadFrom 加载程序集,并在程序集实例上调用 CreateInstance ,而不是使用静态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");

关于c# - 两次加载相同的程序集但版本不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032240/

相关文章:

c# - 如何使用 iText 7 重新排序 pdf 文档

c# - Https 调用未连接到服务器

c++ - "undefined behaviour"是否扩展到编译时?

c# - 使用 LINQ (C#) 对 n 维数组进行数组运算

c# - 将富文本文档保存到 Windows 应用商店应用程序中的临时文件夹

c# - 如何在打开另一个 Winform 时关闭一个 Winform

java - 现有公共(public)方法的 NoSuchMethodError

java - 在运行时动态创建JTable

c# - 在 .Net 中使用 ASTM 协议(protocol)进行临床设备接口(interface)编程

c# - 如何使用 C# 和 iTextSharp 在 pdf 中添加图像?