我正在使用C#和MEF开发模块化应用程序。应用程序应该由
组成主应用程序可以单独运行,也可以使用一个或多个导入的插件运行。这应该是基于模块化MEF的应用程序的相当标准的体系结构。 初步测试表明,这似乎通常有效。如果我将主应用程序以及一个或多个插件程序集部署到文件夹中,一切正常。
但是,我正在努力解决如何为此组织Visual Studio解决方案。我最初的方法是主应用程序以及每个插件都是解决方案中的单独项目。主要应用程序是一个exe项目,而插件是dll项目。插件项目依赖于主项目,因为它们正在实现接口并使用主应用程序中定义的类(我本可以创建一个通用的lib项目来实现这一点,但它似乎没有增加任何好处)。
这样,我可以启动并调试主应用程序(没有插件)。
但是如何组织解决方案以便我可以使用一个,多个或所有插件调试主应用程序? 当前的方法将每个插件构建到自己的文件夹中(通常很好)并将主应用程序复制到每个插件中(这是不太理想的)。我可以配置一个单独的插件项目来启动其输出文件夹中的主应用程序,但我不知道如何为多个插件执行此操作,或者如果不应将主应用程序复制到每个插件输出文件夹。
任何提示或最佳做法都将受到高度赞赏。我正在使用Visual Studio 2015 - 如果这有任何区别。
答案 0 :(得分:0)
插件项目取决于主项目,因为它们是 实现接口并使用main中定义的类 应用程序(我本可以创建一个通用的lib项目, 但它似乎没有增加任何好处。)
它有好处,这里有几个:
但是如何组织解决方案以便我可以调试main 使用一个,多个或所有插件的应用程序?
典型地,您在启动时告诉您的主应用程序要加载哪个插件。有不同的方法:读取包含插件名称的文件,扫描插件的已知目录,组合。所有支持或相对容易使用MEF实现。例如,对于我们拥有的一个大型C#应用程序,所有插件都被复制到bin \ Plugins之类的东西中。当应用程序启动时,它会在bin \ Plugins中查找dll,根据包含正则表达式的文本文件过滤列表,然后从过滤后的列表中加载插件。将应用程序发送给客户时,他们可以获得全部或仅一些插件。在开发时,我们使用文本文件来减少应用程序加载时间。