C# 如何合并不总是存在的DLL?

C# 如何合并不总是存在的DLL?,c#,.net,visual-studio,dll,C#,.net,Visual Studio,Dll,我需要在我们的大型C#软件包中创建一些功能,这些功能将使用第三方软件包中的.NET DLL。并不是所有的客户都会使用这个软件包。如果我在VisualStudio中添加对这些DLL的引用,我可以从中访问所需的对象,但我认为这将破坏我公司中其他没有安装此第三方软件包的开发人员的构建 对于不使用该软件包的客户和开发人员来说,在不破坏其功能的情况下访问此第三方功能的正确方法是什么?我需要通过创建自己的DLL作为间接层来解决这个问题吗?我是否需要在运行时动态加载第三方DLL?据我所知,应用程序在实际需要时

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


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

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


也就是说,可以使用一种称为“热加载”的技术,这意味着使用反射显式访问.NET DLL中包含的类型。在中讨论了该技术。

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


也就是说,可以使用一种称为“热加载”的技术,这意味着使用反射显式访问.NET DLL中包含的类型。该技术将在中讨论。

首先,检查它是否已加载;如果不存在,请检查.DLL是否存在,如果存在,请使用System.Reflection.Assembly.LoadFile动态加载它。您希望检查它是否已经加载的原因是,动态加载程序通常会通过加载其他实例来浪费内存

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


当组件不存在时,请小心参考组件;尽管.NET通常只在需要程序集时动态加载,但较新版本的加载方式越来越激进,以防止启动延迟,因此即使它现在可以工作(这取决于总体配置),在不久的将来也可能无法工作。

首先,检查它是否已经加载;如果不存在,请检查.DLL是否存在,如果存在,请使用System.Reflection.Assembly.LoadFile动态加载它。您希望检查它是否已经加载的原因是,动态加载程序通常会通过加载其他实例来浪费内存

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


当组件不存在时,请小心参考组件;尽管.NET通常只在需要程序集时才动态加载,但较新的版本在加载方式上越来越激进,以防止启动延迟,因此即使它现在可以工作(这取决于总体配置),在不久的将来也可能无法工作。

看起来我将使用如上所述的动态加载。为Alberto演示如何在其答案中使用dynamic关键字提供道具。

看起来我将使用所述的动态加载。向阿尔贝托赠送道具,展示如何在回答中使用动态关键词。

您使用什么技术?应用程序是.NET应用程序,而所讨论的DLL是.NET DLL还是本机Windows DLL?我们的是.NET,我相信所讨论的DLL也是.NET。我可以将它添加为一个普通应用程序中的引用,并从C#调用它。您已经知道答案,很难猜测您还需要什么。谷歌在“c#plugin framework”查询中已经点击了很多次,你不需要再点击一次了。@HansPassant,这太不尊重了。不,我还不知道答案,否则我就不会问了。我也不知道谷歌的“C#插件框架”,你用什么技术?应用程序是.NET应用程序,而所讨论的DLL是.NET DLL还是本机Windows DLL?我们的是.NET,我相信所讨论的DLL也是.NET。我可以将它添加为一个普通应用程序中的引用,并从C#调用它。您已经知道答案,很难猜测您还需要什么。谷歌在“c#plugin framework”查询中已经点击了很多次,你不需要再点击一次了。@HansPassant,这太不尊重了。不,我还不知道答案,否则我就不会问了。我也不知道谷歌是否需要“C#插件框架”。其他开发人员是否需要DLL来构建我们的应用程序?@Skipoppy这么认为,除非它是热加载的。其他开发人员是否需要DLL来构建我们的应用程序?@Skipoppy这么认为,除非它是热加载的。