2

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

在供应商部署中,这两个位置共存,但不是在我的。

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

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

StackOverflow 问题中的操作发生的错误相同,程序集的不同位置停止了类型转换

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

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

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

4

1 回答 1

1

我很确定这是不允许的,原因有很多。

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

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

如果申报var A = new Animal();呢?恕我直言,代码应该简单地内爆以防止它发生。

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

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

于 2013-10-02T15:57:41.340 回答