C# 动态复制DLL文件。

C# 动态复制DLL文件。,c#,dll,log4net,C#,Dll,Log4net,我正在做一个C#class库项目。此项目引用其他DLL文件,例如log4net.DLL。在这个项目中,我只有一个类使用log4net.dll。当其他项目引用我的项目时,仅当其他项目调用使用log4net.dll的类时,我才希望将log4net.dll复制到其bin文件夹 这是否可行?将您的库一分为二,并从主库中删除对log4net.dll的引用,并且仅当您需要与需要log4net.dll的部件绑定的内容时才引用第二个库 处理这种情况的好方法是依赖项注入——看看企业库(unity容器)——尽管这会

我正在做一个C#class库项目。此项目引用其他DLL文件,例如log4net.DLL。在这个项目中,我只有一个类使用log4net.dll。当其他项目引用我的项目时,仅当其他项目调用使用log4net.dll的类时,我才希望将log4net.dll复制到其bin文件夹


这是否可行?

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

处理这种情况的好方法是依赖项注入——看看企业库(unity容器)——尽管这会给您一个额外的dll:)

使用Unity容器:

你将有一个图书馆1和ILog4NetUsingInterface

public static class Bootstrapper {
    public static void Init() {
      ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>();
    }
}
在Library2中,您将拥有Log4NetUsingClass:ILog4NetUsingInterface类

public static class Bootstrapper {
    public static void Init() {
      ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>();
    }
}
在Library2中,您将有一个引导程序,它将Log4NetUsingClass注册为ILog4NetUsingInterface的实现

public static class Bootstrapper {
    public static void Init() {
      ServiceLocator.IoC.RegisterSingleton<ILog4NetUsingInterface, Log4NetUsingClass>();
    }
}
公共静态类引导程序{
公共静态void Init(){
ServiceLocator.IoC.RegisterSingleton();
}
}
只有在需要使用Log4NetUsingClass时,才会调用此Init方法

在其他任何图书馆你都可以打电话

ServiceLocator.IoC.Retrieve<ILog4NetUsingInterface>()
ServiceLocator.IoC.Retrieve()

(如果你不调用bootstrapper,它会给你运行时错误。)

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