如何合并一个并不总是存在的DLL?

时间:2016-03-24 15:28:38

标签: c# .net visual-studio dll

我需要在我们的大型C#软件包中创建一些功能,这些软件包将使用来自第三方软件包的.NET DLL。并非所有客户都会使用此套餐。如果我在Visual Studio中添加对这些DLL的引用,我可以从它们访问我需要的对象,但我认为这将破坏我公司中没有安装此第三方软件包的其他开发人员的构建。

对于我来说,能够在不破坏客户和未能使用该软件包的开发人员的情况下访问此第三方功能的正确方法是什么?我是否需要通过创建自己的DLL作为间接层来解决这个问题?我是否需要在运行时动态加载第三方DLL?

3 个答案:

答案 0 :(得分:1)

据我所知,在实际需要之前,应用程序不会加载.NET DLL。这意味着如果引用了DLL,但没有达到使用它的代码分支,则不需要存在。也许在这种情况下没有必要实施一些东西。

话虽这么说,可以使用一种称为“热加载”的技术,这意味着使用反射来显式访问.NET DLL中包含的类型。该技术在this question中进行了讨论。

答案 1 :(得分:1)

首先,检查它是否已经加载;如果没有,检查.DLL是否存在,如果存在,则使用System.Reflection.Assembly.LoadFile动态加载它。您想要检查它是否已被加载的原因是因为动态加载器通常会通过加载其他实例来浪费内存。

这将是一项更多的工作,但通过动态处理,您可以在应用程序中启用/禁用需要基于它是否存在的程序集的功能,这将最大限度地减少尝试使用它时的人的不必要的错误报告它不存在。

当装配不在时,小心引用装配;虽然.NET通常只在需要程序集时动态加载,但是新版本在加载方式上变得更加积极,以防止启动延迟,因此即使它现在可以正常工作(这取决于整体配置),它也可能不起作用在不久的将来。

答案 2 :(得分:0)

看起来我将使用enter link description here所述的动态加载。向Alberto道具,展示如何在他的答案中使用动态关键字。