C# 仅在加载(.NET)DLL时执行函数的最佳方法?

C# 仅在加载(.NET)DLL时执行函数的最佳方法?,c#,dll,C#,Dll,我不知道最好的方式来解释这一点,所以请留下评论,如果你不明白 基本上,我有几个库,用于处理不同的程序的各种任务-通知只是一个例子 现在,我正在构建一个新程序,我希望它尽可能轻量级。虽然我希望包括我的通知引擎,但我不认为很多人会实际使用它的功能,因此,我宁愿默认情况下不包括它——只是作为可选下载 我该如何编程 对于非托管DLL和,我基本上可以将全部内容封装在try/catch循环中,但我不确定托管版本 到目前为止,我能想到的最好的方法是在启动时检查DLL文件是否存在,然后设置一个bool字段或类似

我不知道最好的方式来解释这一点,所以请留下评论,如果你不明白

基本上,我有几个库,用于处理不同的程序的各种任务-通知只是一个例子

现在,我正在构建一个新程序,我希望它尽可能轻量级。虽然我希望包括我的通知引擎,但我不认为很多人会实际使用它的功能,因此,我宁愿默认情况下不包括它——只是作为可选下载

我该如何编程

对于非托管DLL和,我基本上可以将全部内容封装在try/catch循环中,但我不确定托管版本

到目前为止,我能想到的最好的方法是在启动时检查DLL文件是否存在,然后设置一个bool字段或类似字段,每次我希望触发通知时,我都可以执行if/检查bool并触发

我从调试窗口看到,DLL文件只在需要时加载。程序显然会编译,因为所有组件对项目都是可见的,但是它会在没有DLL的最终用户机器上运行吗

更重要的是,有没有更好的方法


理想情况下,我希望在我的应用程序中没有任何关于通知的内容,并且以某种方式拥有它,以便在下载DLL文件时,它会在外部添加此功能。有几个额外的字节调用
通知(“blabla”)(或类似),但当我有更大的意图,只想知道这类事情的最佳实践时,我会想得更远。

您可以使用System.Reflection.Assembly及其LoadFile方法动态加载DLL。然后,您可以使用汇编中的方法获取嵌入到DLL中的类、类型等并调用它们


如果您只需检查.dll是否存在或加载插件目录中的每个.dll,您就可以得到您想要的

您可以使用System.Reflection.Assembly及其LoadFile方法动态加载DLL。然后,您可以使用汇编中的方法获取嵌入到DLL中的类、类型等并调用它们


如果您只需检查.dll是否存在或加载插件目录中的每个.dll,您就可以得到您想要的

对于您的问题,该程序是否将在没有DLL的情况下在用户的机器上运行-是的,该程序将运行。只要您不需要运行时来加载dll中定义的类,那么机器上是否缺少dll就无关紧要。对于您正在寻找的关于按需加载dll的方面,我认为您可以使用某种配置和反射(直接或通过某种IoC策略)。

对于您的问题,如果程序在没有dll的情况下在用户的机器上运行,那么程序将运行-是的,程序将运行。只要您不需要运行时来加载dll中定义的类,那么机器上是否缺少dll就无关紧要。关于按需加载dll的问题,我认为您可以使用某种配置和反射(直接或通过某种IoC策略)。

尝试在启动时加载插件


不必到处检查布尔值,您可以为通知创建一个委托字段,并将其初始化为无操作函数。如果加载插件成功,则将委托分配给插件实现。然后,事件发生的任何地方都可以调用委托,而不用担心插件是否可用。

尝试在启动时加载插件

不必到处检查布尔值,您可以为通知创建一个委托字段,并将其初始化为无操作函数。如果加载插件成功,则将委托分配给插件实现。然后,事件发生的任何地方都可以调用委托,而不必担心插件是否可用

我不认为有多少人会这么做 实际上使用它的功能,所以,我 我宁愿默认不包括它 -作为可选下载

这些东西通常被描述为插件(或附加组件或扩展)

自.NET4以来,实现这一点的标准方法是使用。它作为
System.ComponentModel.Composition
程序集和命名空间包含在框架中。要开始,最好阅读和

我不认为有多少人会这么做 实际上使用它的功能,所以,我 我宁愿默认不包括它 -作为可选下载

这些东西通常被描述为插件(或附加组件或扩展)


自.NET4以来,实现这一点的标准方法是使用。它作为
System.ComponentModel.Composition
程序集和命名空间包含在框架中。首先,最好阅读和的细微区别,但也可以在不知道路径的情况下测试加载是否成功。程序集绑定配置可用于控制插件目录的位置,而无需程序了解名称解析的工作原理。换句话说,代码应该与实际的物理程序集文件无关。。。在你的答案中编辑了空格,因为它说我已经投票了,不会让我投票。。。我认为这与之前的中断有关。细微的区别,但您也可以测试负载是否成功,而不知道路径。程序集绑定配置可用于控制插件目录的位置,而无需程序了解名称解析的工作原理。换句话说,代码应该与实际的物理程序集文件无关