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

时间:2014-09-15 21:02:47

标签: c# vb.net winforms

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

最近,我使用新版本的gridview.dll创建了一个新应用程序。我无法更新框中的现有gridview.dll,因为它将破坏现有的winform应用程序。由于.dll共享相同的名称,我重命名了更新的“gridview2.dll”。

这在我的本地机器上工作正常,但由于一些奇怪的原因在生产盒上失败。提供一条错误消息,指出它无法加载旧的“gridview.dll”。

如何解决此问题?

3 个答案:

答案 0 :(得分:1)

我建议在配置中使用重定向,并测试新版本是否适用于两者的目的,以便您不需要旧的DLL。您必须确定每个的确切版本,真正的程序集名称(有时是文件名,但有时不是),以及publicKeyToken。

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

答案 1 :(得分:0)

如果您可以在GAC中安装两个网格视图,而不是在应用程序文件夹中,它可能会起作用 - 每个进程将根据版本获得它想要的网格视图。

如果gridviews具有强名称,这将有效。

您可能必须使用显式重定向来帮助.NET。见here。首先尝试没有重定向。

答案 2 :(得分:-2)

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