【问题标题】:How to dynamically load (and use) .net library with properly established dependencies using library versions?如何使用库版本动态加载(和使用)具有正确建立依赖关系的.net库?
【发布时间】:2010-10-22 12:49:53
【问题描述】:

情况概览。

我们有几个项目用于多功能系统。

  1. objectAccessLibrary.dll(多个版本)
  2. dispatcherHandler.dll (v.1.0)(依赖: objectAccessLibrary.dll的版本独立部分)
  3. 事件处理程序:handler_01.dllhandler_02.dllhandler_03.dll。 依赖项:dispatcherHandler.dll (v.1.0)、objectAccessLibrary.dll(特别是 每个handler_xx.dll的版本)
  4. DispatcherService(依赖性:objectAccessLibrary.dll 的特定版本)。动态加载处理程序并使用其功能来调度事件。

问题

objectAccessLibrary.dll 正在与核心系统一起开发。它公开了一些可以从版本更改为版本的接口/对象。因此,每次我们需要添加新处理程序时,都应该使用旧处理程序重新编译和重新测试 dispatcherHandler.dllDispatcherService,因为它必须使用最新版本的 objectAccessLibrary.dll 。 但另一方面,DispatcherService 必须在 hanlder_xx.dll 动态加载时运行。

如果新处理程序不使用新的 objectAccessLibrary.dll 功能,则当前版本可以正常工作。 一般情况下,我们需要加载不同版本的objectAccessLibrary.dll,并在它们和dispatcherHandler.dll之间共享一些对象。如何做到这一点?

【问题讨论】:

    标签: .net .net-3.5 dll type-conversion


    【解决方案1】:

    我建议研究某种 IoC 容器,例如 StructureMapCastle Windsor。两者都非常成熟,可以让您将依赖项动态加载到项目中。还有许多其他容器也可能满足您的要求。

    【讨论】:

    • 我试过了,但是当 AppDomain 的版本加载了 dispatcherHandler.dll 时,其他版本的程序集没有加载
    • 您是否尝试过专门将版本化程序集添加到容器中?我过去在配置文件中指定了程序集名称,并以这种方式将它们添加到容器中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2019-12-29
    • 2011-07-22
    • 2020-05-10
    • 2018-08-12
    相关资源
    最近更新 更多