在不同位置从同一程序集加载的对象之间强制转换异常

本文关键字:之间 对象 转换 异常 加载 位置 程序集 | 更新日期: 2023-09-27 18:33:33

我正在尝试使用提供的DLL,该DLL从两个不同的位置加载相同的依赖DLL。

在供应商部署中,这两个位置是一致的,但在我的位置中并非如此。

当代码运行时,我有一个类转换异常:

Unable to cast [A]Type to [B]Type

错误与堆栈溢出问题中的操作发生相同 程序集的不同位置停止了类型转换。

这两种类型是从 DLL 的两个不同位置加载的相同类型(在两个目录中复制的同一物理文件)。

我尝试使用带有双 DLL 签名的强名称,但它不起作用。

有没有办法告诉 CLR 将这两种类型视为同一类型?

在不同位置从同一程序集加载的对象之间强制转换异常

我很

确定由于很多原因不允许这样做。

首先,假设您有 2 个程序集。 第一个定义了动物,并有一个叫做狗的后代。 第二个定义动物。 这两个程序集使用相同的命名空间。

在运行时,当您声明var B = new Dog();时会发生什么? 代码是否应该交换第二个程序集版本的 Animal?

如果你声明var A = new Animal();怎么办? 恕我直言,代码应该简单地内爆以防止它。

从安全角度来看,您绝对不希望有人简单地链接另一个与您的库定义相同命名空间的程序集来换出特定类。

关键是,通过链接到包含完全相同类型的两个物理程序集,您正在引入一个没有真正方法可以解决的巨大问题。 更改您的代码以与供应商相同的方式工作。