具有依赖项的c#Activator.CreateInstanceFrom从GAC中选择了错误的版本

本文关键字:选择 版本 错误 GAC CreateInstanceFrom 依赖 c#Activator | 更新日期: 2023-09-27 18:00:09

旧代码,例如Albert.dll正被后期绑定(使用Activator.CreateInstanceFrom)以实例化Albert类。它有一个巴里的依赖,它被保存在GAC中,有各种版本(例如1-6)。Albert引用了Barry的版本3,但在实例化时,尝试使用6(最新版本)并成功。但是,当代码试图将Albert类强制转换为Barry时,它会以"无法强制转换"异常失败。我无法添加版本提示,因为所需的版本是动态的。反射器犯了与.net相同的错误,引用v3,然后用v6实例化。

在旧服务器(03,.net1)上似乎可以正常工作,但现在在新服务器(2012,.net 4.6.1)上失败。

具有依赖项的c#Activator.CreateInstanceFrom从GAC中选择了错误的版本

您可以完全限定这样的类型

var type = Type.GetType("ConsoleApplication2.Albert, ConsoleApplication2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
Activator.CreateInstance(type);