【问题标题】:Different versions of Enterprise Library in one process一个进程中的不同版本的企业库
【发布时间】:2012-11-01 21:30:26
【问题描述】:

我们正在为 Autodesk Inventor 开发一个插件。我们的软件是在运行时加载到 Inventor 中的一堆 dll 程序集。我们决定使用 Microsoft Enterprise Library 5.0 进行日志记录和异常处理。

现在我们遇到了一个问题,因为事实证明 Inventor 2013 使用的是 Enterprise Library 4.1。当我们的加载项加载时,它无法加载正确版本的程序集,因为 Inventor 的 Bin 目录中已经有一个旧版本。

到目前为止我们已经考虑过的选项:

  1. 在我们的产品部署期间,覆盖 Inventor 的 Bin 文件夹中的旧库
  2. 在我们的程序集中使用 EL 4.1

两者都很糟糕,我的想法已经不多了,所以我正在寻求帮助。

选项 1 提出了这个问题:企业库是否向后兼容,替换 Bin 文件夹中的那些 DLL 会导致问题吗?我已经尝试过了,Inventor 没有抱怨并且按预期工作(没有检查 EL 功能)。

选项 2 让我们使用旧版本并将我们绑定到 Autodesk 正在使用的版本,因此我们必须注意他们何时升级,尤其是当他们发布新版本的 Inventor 时。

在这种情况下,最佳做法是什么?

更新:
我们通过将更新版本的企业库放入 GAC 中解决了这个问题。我认为这里发生的事情是 .NET 尝试首先加载旧版本(因为它在程序集搜索顺序中更高)并且在失败后再也没有进一步寻找合适的版本。在 GAC 中,它可以正确解析。

【问题讨论】:

  • 您是否考虑过覆盖 DLL,然后在配置文件中为入口点使用绑定重定向?
  • 据我所知,如果我们选择选项 1,重定向将是一个强制性步骤。这意味着我们不仅要覆盖 Inventor 部署的 DLL,还要修改其配置文件。我不太喜欢这个解决方案,但看起来我们没有其他出路。尽管如此,问题仍然存在:企业库是否足以向后兼容这种重定向?

标签: c# .net plugins enterprise-library autodesk


【解决方案1】:

据我所知,一个合理的解决方案是嵌入程序集并使用 ResourceManager 类访问它们,这将允许您使用较新的版本,同时维护父项目的日志记录机制。

您可能会发现这个问题很有用: Embedding assemblies inside another assembly

【讨论】:

  • 谢谢。我不知道你能做到这一点。这对未来很有用,但我已经有了这个问题的解决方案。我要更新帖子了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-28
  • 1970-01-01
  • 2016-07-24
  • 2019-11-18
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
相关资源
最近更新 更多