同一引用程序集的多个版本

时间:2012-08-22 17:07:11

标签: c# telerik

我有一个问题,到目前为止无法解决。

我有一个从文件夹加载插件(.dll程序集)的程序集(可执行文件.net 4.0)。主可执行文件引用了telerik.windows.controls.dll并且运行良好。

现在我编写了一个新插件,它使用了更新版本的telerik库,更具体的是汇编telerik.windows.controls.GanttView。问题是GanttView控件使用了较新版本的telerik.windows.controls.dll,因此插件无法加载telerik引用的程序集而导致崩溃。

我知道我可以通过升级到最新的一组引用程序集(telerik)来解决这个问题,但我的团队尚未对这些控件进行QA /测试,以确保不会引入新的错误。

所以,总结一下:

main.exe - > a.dll - > X.dll(v1)

然后我添加了一个名为b.dll的新插件:

main.exe - > b.dll-> X.dll(v2)     + ------------> X.dll(v1)

所以问题是我的plguin是否可以从不同的位置引用不同版本的程序集(以及它的引用程序集),因为现在它会加载主程序集加载的程序集。

感谢。

2 个答案:

答案 0 :(得分:1)

简短的回答是否定的,如果较新的dll具有相同的程序集信息。

更长的答案是,在应用程序域中(除非您自己创建更多,否则不会超过一个),您只能加载一次特定的程序集。再一次,假设我们所讨论的汇编(dll)具有相同的汇编信息。如果要加载较新的程序集,则必须创建单独的应用程序域。但是,您将无法在初始应用程序域中使用它,其中您的其他控件是“活着的”。

答案 1 :(得分:1)

我们在应用程序的某个时刻完成了这项工作。我们这样做的方法是在bin目录中创建一个文件夹,该文件夹保存了过时的dll,然后将以下行添加到引用旧dll的app.config文件中......

<runtime>
    <assemblyBinding xmlns = "urn:schema-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity 
                name = "YourAssembly"
                />
            <codeBase version="YourAssemblyVersion" href = "FolderWithinBinDirectory/YourAssembly.dll"/>
        </dependentAssembly>
    </assemblyBinding>
</runtime>

可能还有更多,但我认为这就是我们所要做的一切。