在C#应用程序中获得插件或扩展功能的步骤是什么?

在C#应用程序中获得插件或扩展功能的步骤是什么?,c#,architecture,plugins,extensibility,C#,Architecture,Plugins,Extensibility,多年来,我一直在Win32&C/C++中使用插件架构,使用LoadLibrary,GetProcAddress等从DLL动态加载扩展点 现在到了C#的时候了。相应的步骤是什么-动态加载程序集?或者它是一个完全不同的模式?一般来说,您可以在需要插件的地方查找,加载程序集并查找某些类。通常插件通过扩展某种插件基类或实现接口来宣传自己 另一个选项是,它也将是.NET 4的一部分,但预览版本也适用于当前的.NET framework。通常,您可以查看需要插件的地方,加载程序集并查找某些类。通常插件通过扩

多年来,我一直在Win32&C/C++中使用插件架构,使用
LoadLibrary
GetProcAddress
等从DLL动态加载扩展点


现在到了C#的时候了。相应的步骤是什么-动态加载程序集?或者它是一个完全不同的模式?

一般来说,您可以在需要插件的地方查找,加载程序集并查找某些类。通常插件通过扩展某种插件基类或实现接口来宣传自己


另一个选项是,它也将是.NET 4的一部分,但预览版本也适用于当前的.NET framework。

通常,您可以查看需要插件的地方,加载程序集并查找某些类。通常插件通过扩展某种插件基类或实现接口来宣传自己


另一个选项是,它也将是.NET 4的一部分,但预览版本也适用于当前的.NET framework。

您可以使用System.Addin命名空间中的类。见本讨论:

这里还有一个演示:


另一个解决方案是使用似乎非常强大的类。

您可以使用System.Addin命名空间中的类。见本讨论:

这里还有一个演示:


另一个解决方案是使用它,它似乎非常强大。

在.Net应用程序中,我们可以使用AppDomain和AppDomain.CurrentAppDomain将程序集动态加载到我们的应用程序中。问题是,一旦程序集加载到AppDomain中,您就可以卸载它。有一个解决方法可以解决这个问题,您可以加载此类程序集在不同AppDomain中的程序集,并在您不需要这些程序集时卸载它们。但这种方法非常复杂,因为在两个不同AppDomain中的两个程序集之间传递对象并不那么容易。

在.Net应用程序中,我们可以使用AppDomain和AppDomain.CurrentAppDomain将程序集动态加载到我们的应用程序应用程序。问题是,一旦程序集加载到AppDomain,您就可以卸载它。解决此问题的一种解决方法是,您可以在不同的AppDomain中加载此类程序集,并在不需要这些程序集时卸载。但这种方法非常复杂,因为在两个程序集之间传递对象在两个不同的AppDomain中,这并不容易。

和@jmservera:这些链接无效。@Kevin Brock,如果你是说它们坏了,请检查这些链接:@jmservera:对不起,我习惯于看到指向特定问题的链接。这是我第一次看到基于标签的问题组链接。和@jmservera:这些链接无效。@Kevin Brock,如果你是说它们已断开,请检查这些链接:@jmservera:对不起,我习惯于看到指向特定问题的链接。这是我第一次看到基于标签的问题组链接。MEF已经存在一段时间了,如果不是3.0,它也可以运行在3.5上。@Jay:我有没有说过它目前没有运行?不过,澄清一下。但是,我不完全确定在应用程序中使用预览版本有多好。我曾经这样做过,现在API确实有了很大的变化。MEF已经存在了一段时间,如果不是3.0,它也可以在3.5上运行。@Jay:我有没有说过它目前没有运行?不过,澄清一下。但是,我不完全确定在应用程序中使用预览版本有多好。我曾经这样做过,现在API确实有了很大的变化。我想你的意思是“不能加载”而不是“…可以加载…”我的意思是你可以卸载其他AppDomainPassing对象这不是那么容易,必须非常小心地完成,很容易犯一点错误,让主appdomain以静默方式加载你的程序集。我想你的意思是“不能加载”而不是“…可以加载…”我的意思是你可以卸载其他AppDomainPassing对象这不是那么容易,必须非常小心地完成,很容易犯一点小错误,让主appdomain以静默方式加载程序集。