【问题标题】:Winforms application: Dependency issues for different versions of dependency dllWinforms应用程序:不同版本依赖dll的依赖问题
【发布时间】:2014-09-16 06:43:09
【问题描述】:

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

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

这在我的本地机器上运行良好,但由于某些奇怪的原因在生产机器上失败了。给出无法加载旧的“gridview.dll”的错误消息。

我该如何解决这个问题?

【问题讨论】:

  • 文件在哪里?GAC?其他目录?

标签: c# vb.net winforms


【解决方案1】:

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

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

【讨论】:

  • 似乎仍然有问题。我手上可能有红鲱鱼。我将 winform 可执行文件和新的 .dll 单独放在一个子目录中。仍然遇到相同的“无法加载文件或程序集”错误。
【解决方案2】:

如果您可以在 GAC 中而不是在应用程序文件夹中安装这两个 gridview,它可能会起作用 - 每个进程都会根据版本获得所需的 gridview。

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 您可能应该将您所引用的确切内容放入答案的内容中。我不认为你的第一句话真的能解释什么。
    猜你喜欢
    • 2019-02-25
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2012-05-30
    • 2016-10-02
    • 2016-09-18
    相关资源
    最近更新 更多