我有一个问题,到目前为止无法解决。
我有一个从文件夹加载插件(.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是否可以从不同的位置引用不同版本的程序集(以及它的引用程序集),因为现在它会加载主程序集加载的程序集。
感谢。
答案 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>
可能还有更多,但我认为这就是我们所要做的一切。