【问题标题】:Copying DLL files dynamically.动态复制 DLL 文件。
【发布时间】:2013-06-20 22:48:42
【问题描述】:

我正在开发一个 C# 类库项目。该项目引用了其他 DLL 文件,例如 log4net.dll。在这个项目中,我只有一个使用 log4net.dll 的类。当其他项目引用我的项目时,只有当其他项目正在调用使用 log4net.dll 的类时,我才想将 log4net.dll 复制到其 bin 文件夹中。

这可行吗?

【问题讨论】:

  • 如何动态加载 DLL 并完全避免硬引用:stackoverflow.com/questions/465488/…
  • 这就是我正在做的。我有一个用户可以调用并设置 DLL 路径的适配器。但是如果我看到用户的项目需要它,我可以复制 DLL,我不希望用户这样做。

标签: c# dll log4net


【解决方案1】:

将您的库一分为二并从主库中删除对 log4net.dll 的引用,并且仅当您需要与需要 log4net.dll 的部分相关联的内容时才引用第二个库。

处理这种情况的好方法是依赖注入——看看企业库(统一容器)——虽然这会给你一个额外的 dll :)

使用 Unity 容器:

您将拥有带有 ILog4NetUsingInterface 的 Library1

在 Library2 中,您将拥有类 Log4NetUsingClass : ILog4NetUsingInterface

在 Library2 中,您将拥有将 Log4NetUsingClass 注册为 ILog4NetUsingInterface 的实现的引导程序

public static class Bootstrapper {
    public static void Init() {
      ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>();
    }
}

只有在需要使用 Log4NetUsingClass 时才会调用此 Init 方法

在其他所有库中,您都可以调用

ServiceLocator.IoC.Retrieve<ILog4NetUsingInterface>()

(如果你不调用引导程序,它会给你运行时错误。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2018-11-09
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多