DLL地狱:旧的.DLL文件分为两部分

本文关键字:DLL 两部分 旧的 地狱 文件 | 更新日期: 2023-09-27 18:25:28

我遇到一个问题,我需要用于项目的组件被配置为使用旧的DLL。其他组件使用这个DLL的较新版本,bindingRedirect似乎解决了大部分问题。

以下是一个有趣的问题,我不确定如何解决(很抱歉使用了弃权名称):组件X试图在DLL A中查找类型Y,因为在旧版本中Y驻留在A中。然而,在后来的版本中,A被拆分为两个DLL文件,AB(其中包含A中事物的一个特殊分支)。Y型已经从A型移到了B型,但许多其他重要的组成部分仍然存在于A型中。有没有一种方法可以进行绑定,使X在B中查找这些类而不是a,或者用另一种方法来解决这个问题?我无法访问任何源代码,但确实有旧的.dll,尽管我总是想同时使用新的.dll。

我曾尝试使用codeBase属性链接到旧的A,但效果不佳,以及QualityAssembly,它似乎也不起我所搜索的作用。

编辑:作为一种变通方法,我创建了一个名为LegacyDlls的单独文件夹,该文件夹与我的bin文件是分开的(这一部分非常重要),并将程序集a的旧版本放在那里。然后我使用了一个类似的代码库标签:

<dependentAssembly>  
            <assemblyIdentity name="A" culture="neutral" publicKeyToken="AkeyGoesHere" />
            <codeBase version="2.1.0.0" href="LegacyDlls'A.dll" />
        </dependentAssembly>

我不再得到TypeLoad异常,所以我认为这意味着进步!

DLL地狱:旧的.DLL文件分为两部分

听起来你把自己画成了一个角落。

有一些方法可以做到这一点,即在运行时发出代码并将方法从B添加到A中,但从长远来看,这会导致严重的维护问题,所以我不建议这样做

要么等待组件在新的dll上运行新版本,要么在没有它的情况下工作。