【问题标题】:Split C# application into module parts [closed]将 C# 应用程序拆分为模块部分 [关闭]
【发布时间】:2017-07-09 21:07:19
【问题描述】:

我有一个完全工作的应用程序,它有一个主应用程序和存储在 dll 文件中的单独模块/程序功能。存储在 dll 文件中的表单被动态加载到 FlowLayoutPanel 中。我很感兴趣,使用这种技术有什么缺点吗?因为一开始我在设置项目时遇到了麻烦,而另一种解决方案是拥有一个主应用程序,但模块也是运行自己的窗口的 .exe 应用程序。

【问题讨论】:

  • 使用 Dlls 的概念已经很成熟了

标签: c# performance dll modular


【解决方案1】:

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

example of post-build copy event

【讨论】:

  • 谢谢您的评论。我正在使用这些行来加载自定义 dll pastebin.com/MqAEsq9z 。我对 C# 很陌生,我已经在 Delphi 中编程了大约 2 年以上,所以 C# 似乎更容易学习。我一定会寻找反射来加载 DLL,谢谢我收藏的链接。
  • 查看您的代码我可以确认您已经在使用反射。
  • @ZsoltOroszlány - 您使用的方法的一个缺点是程序集被加载到当前的 AppDomain 中,这意味着您无法在不卸载 AppDomain 的情况下卸载它们(即关闭程序)。虽然不是必需的,但您可以研究如何将模块加载到单独的 AppDomain 中。这样您就可以在不停止应用程序的情况下卸载它们。这样做的一个原因是更新模块。只是一个想法。
  • @ChrisDunaway 我觉得我应该使用 AppDomain。到目前为止,我通过调用 ShowDialog() pastebin.com/qMizm4R9 显示来自 dll 的表单,但只要我想将它“附加”到 FlowLayoutPanel 中,我就会得到一个异常 ... of type 'System.Runtime.Remoting.RemotingException' occurred in System.Windows.Forms.dll
猜你喜欢
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
相关资源
最近更新 更多