将C#应用程序拆分为模块部分

将C#应用程序拆分为模块部分,c#,performance,dll,modular,C#,Performance,Dll,Modular,我有一个完整的工作应用程序,它有一个主应用程序和单独的模块/程序函数存储在dll文件中。存储在dll文件中的表单被加载到FlowLayoutPanel中。我很感兴趣的是,使用这种技术有什么不利之处吗?因为一开始我在设置project时遇到了问题,而另一个解决方案是有一个主应用程序,但模块也是运行自己窗口的.exe应用程序。假设您使用反射加载DLL,并且它是松散耦合的(正确使用接口)。您应该将所有模块项目设置为作为类库输出(这将生成.dll文件,但每个模块不生成.exe)。 然后,可以使用visu

我有一个完整的工作应用程序,它有一个主应用程序和单独的模块/程序函数存储在dll文件中。存储在dll文件中的表单被加载到FlowLayoutPanel中。我很感兴趣的是,使用这种技术有什么不利之处吗?因为一开始我在设置project时遇到了问题,而另一个解决方案是有一个主应用程序,但模块也是运行自己窗口的.exe应用程序。

假设您使用反射加载DLL,并且它是松散耦合的(正确使用接口)。您应该将所有模块项目设置为作为类库输出(这将生成.dll文件,但每个模块不生成.exe)。 然后,可以使用visual studio中的生成后事件设置(对于每个模块项目),将每个模块的Dll文件自动复制到目标位置。事实证明,这对我很有效


使用DLL的概念已经确立。谢谢您的评论。我正在使用这些行加载自定义dll。我对C#还很陌生,我已经在Delphi中编程2年多了,所以C#似乎更容易学习。我一定会寻找反射来加载DLL,谢谢你的链接,我将其添加为书签。查看你的代码,我可以确认你已经在使用反射。@ZsoltOroszlány-你正在使用的方法的一个缺点是程序集被加载到当前的AppDomain中,这意味着你不能在不卸载AppDomain的情况下卸载它们(即关闭程序)。虽然这不是必需的,但您可以研究如何将模块加载到单独的AppDomain中。这样,您就可以在不停止应用程序的情况下卸载它们。这样做的一个原因是更新模块。只是一个想法。@ChrisDunaway我觉得我应该使用AppDomain。到目前为止,我通过调用
ShowDialog()
从dll中显示表单来实现它,但当我想将它“附加”到FlowLayoutPanel中时,我得到了一个异常
。。。System.Windows.Forms.dll中发生“System.Runtime.Remoting.RemotingException”类型的异常