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

时间:2012-02-23 09:34:02

标签: c# .net dll

我遇到一个问题,其中我需要为项目使用的组件配置为使用旧的DLL。其他组件使用此DLL的较新版本,bindingRedirect似乎处理大多数这些问题。

这是一个有趣的问题,我不确定如何解决(使用abstarct名称道歉): 组件X 尝试在 DLL A 中查找类型Y ,因为在旧版本中,Y位于A中。但是,在以后的版本中,A有被分成两个DLL文件, A B (其中包含A中找到的特殊分支)。类型Y已移出A并进入B,但许多其他重要组件仍然存在于A. 有没有办法进行绑定,以便X在B中查找这些类而不是A,或者另一种方法来解决这个问题? 我无法访问任何源代码,但确实有旧的.dll,尽管我总是希望同时使用新的.dll。

我已经尝试使用codeBase属性链接到旧的A,这很糟糕,以及QualifyAssembly,它似乎也没有做我正在搜索的内容。

编辑:作为一种解决方法,我创建了一个名为LegacyDlls的独立文件夹,它与我的bin文件分开(这部分非常重要),并将旧版本的Assembly A放在那里。然后我使用了像这样的代码库标签:

<dependentAssembly>  
            <assemblyIdentity name="A" culture="neutral" publicKeyToken="AkeyGoesHere" />

            <codeBase version="2.1.0.0" href="LegacyDlls\A.dll" />
        </dependentAssembly>

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

1 个答案:

答案 0 :(得分:0)

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

通过在运行时发出代码并将方法从B添加到A中,有很多方法可以做到这一点,但这会导致严重的维护问题,所以我不会建议。

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