Winforms应用程序:不同版本的依赖关系dll的依赖关系问题

本文关键字:依赖 关系 dll 问题 版本 应用程序 Winforms | 更新日期: 2023-09-27 18:21:55

在我们的生产环境中,同一目录中有许多单独的winform应用程序和一个"gridview.dll"。我无法改变这个事实。

最近,我使用新版的gridview.dll创建了一个新的应用程序。我无法更新盒子上现有的gridiew.dll,因为它会破坏现有的winform应用程序。由于.dll共享相同的名称,我将较新的重命名为"gridview2.dll".

这在我的本地机器上运行良好,但由于某种奇怪的原因,在生产箱上出现了故障。给出一条错误消息,表示无法加载旧的"gridview.dll".

如何解决此问题?

Winforms应用程序:不同版本的依赖关系dll的依赖关系问题

我建议在配置中使用重定向,并测试新版本是否能同时满足这两个目的,这样您就不需要旧的DLL了。您必须确定每个程序集的确切版本、真正的程序集名称(有时是文件名,有时不是)和publicKeyToken。

<dependentAssembly>
 <assemblyIdentity name="gridview" publicKeyToken="?????"/>
 <bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>

如果您可以将两个网格视图都安装在GAC中,而不是安装在应用程序文件夹中,那么它可能会工作——每个进程都会根据版本获得所需的网格视图。

如果网格视图有一个强名称,这将起作用。

您可能需要帮助.NET进行显式重定向。请参见此处。先尝试不重定向。

这类问题的推荐解决方案是程序集。看见http://msdn.microsoft.com/en-us/library/ms173099.aspx这将允许每个应用程序指向不同版本的dll,并使两个版本同时在系统上可用。或者,您可以对新应用程序使用专用程序集,并为新应用程序提供一个单独的dll实例。不幸的是,它有点重,但它将允许每个应用程序都有一个单独的上下文来解析dll。