一个解决方案中有多个应用程序

4
我相信这是可能的,但不确定如何实现。我需要创建一个服务器/客户端解决方案,通常情况下,我会为服务器创建一个新的解决方案,为客户端创建另一个新的解决方案,但我想在单个解决方案中完成它们,因为它们都将使用相同的自定义类,而且不想遇到必须两次更改相同文件的问题。
所以问题是,我可以在单个解决方案中创建多个exe文件,并且实现这一点的步骤是什么。
我已经在这里搜索过,但不完全理解该过程,如果有人能指导我大致正确的方向,那就太好了:)
VS2010使用C#和Windows表单。

1
只需添加您想要的项目并构建解决方案。 - Matías Fidemraizer
你正在寻找多项目解决方案吗? - gabsferreira
我认为在回答你的问题之前,你需要更具体地说明这个客户端服务器将用于什么类型的应用程序。它是传统的FAT客户端、Thin Client、WPS等吗?然后指定该应用程序应该执行的操作,从那里可以建议一个有效的解决方案。 - MethodMan
系统基本上应该输出两个可执行文件,使用ISS进行安装时会选择正确的文件进行安装。这是一个简单的支持桌面软件,因此客户端需要在其通知区域中安装一个程序,公司机器上还需要另一个程序,以便在提出新工单时弹出通知。 - Neo
你是指线程编程还是威胁面分析,@mekici - Tetsujin no Oni
7个回答

10
请参阅我之前回答的关于跨平台客户端服务器应用程序开发和多个客户端代码重用的thisthis。这同样适用于您在此处的Winforms客户端服务器应用程序。
正如许多答案所述,您可以按以下方式构建解决方案以共享代码:
项目结构
解决方案 .. 公共 (消息、数据合同、实用工具) .. 中间件 (引用公共,提供公共服务) .. .. 服务器Exe (引用公共、中间件) .. .. 客户端Exe (引用公共、中间件)
顶级客户端-服务器架构

Cross-platform application stack

你的堆栈变成了

客户端:

客户端具有序列化,Web服务/中间件的客户端实现以及模型-视图-控制器模式用于视图。

中间件:

中间件即服务器/客户端桌面上的共享服务和数据传输实现可以相同。或者您也可以称其为服务。任何仅适用于客户端(或仅适用于服务器)的特定服务都应放在单独的程序集中,并且仅由特定的exe(客户端或服务器)引用。即不要共享未共享的代码!

消息/数据合同:

使用我上面概述的技术在所有客户端/服务器之间共享。在您的情况下,这些可能是客户端和服务器之间共享的常见领域对象。

服务器:

所有业务逻辑、数据库访问和服务器端服务实现。对于DB访问,我建议使用PetaPoco作为优秀的MicroORM。

开发和调试

是的,一个解决方案可以有多个exe文件,只需右键单击服务器Exe或客户端Exe并使用设置启动项目即可调试其中一个。

如果您希望同时运行客户端和服务器,您可以从命令行运行两者,并将调试器附加到两个进程。

此致敬礼,


@Neo 谢谢!我希望这不是过度杀伤。从你的问题中,我得到的印象是你不仅对项目设置,而且对一般的客户端/服务器架构也不确定。在VS2010中,项目部分实际上非常容易。只需添加多个Exe并使用“设置启动项目”即可。困难的部分是如何划分代码以实现关键逻辑、类等的高效共享和重用。我的建议是不要创建太多的项目。我最近参与了一个有97个项目的客户端/服务器环境应用程序:(此外,使用接口/抽象和最重要的是依赖注入 - Dr. Andrew Burnett-Thompson
嗨,安迪,不,我认为这一点也不过分。在我的书中没有这样的事情 :) 我已经使用了我创建的自定义php api集成了几个客户端服务器应用程序,因此集成不是问题,主要是VS方面的问题,因为它不是最友好的环境!我对你在帖子中提到的几个项目很感兴趣,MVP?MVVM?另外,您是否有关于PetaPoco的更多信息,因为它听起来很有趣。 - Neo
@Neo 非常抱歉,以上很多内容都是之前的问题(已经声明过了)。我会将MVVM删除,因为它在winforms中不适用。MVP是“Model View Presenter”,我建议您查阅一下,作为在winforms中开发GUI代码的最佳实践。Petapoco是一个C#对象关系映射库,只有1500行,但非常强大。如果您的服务器是用php实现的,那么这也不适用。 - Dr. Andrew Burnett-Thompson

2
首先,确保您可以在解决方案资源管理器中看到解决方案文件: 转到“工具->选项”。然后在“项目和解决方案”下,确保“始终显示解决方案”已选中。
然后,在解决方案资源管理器中(位于项目文件的右上方),右键单击解决方案(仅在项目图标上方),然后单击“添加->新建项目”。
关于解决方案的布局,您将有3个项目:客户端项目、服务器项目和共享类的类库项目。 您的客户端和服务器项目将引用库项目,请参阅:项目引用(MSDN) 另请参见:多项目解决方案(MSDN)

1
你可以这样做:
  1. 创建一个解决方案
  2. 向解决方案添加三个项目:
    1. 项目A:服务器exe
    2. 项目B:客户端exe
    3. 项目C:一个类库项目,包含项目A和B使用的类。
  3. 让项目A和B引用项目C

1

您可以在解决方案资源管理器顶部的解决方案图标上右键单击,然后选择添加新项目选项。


1
  1. 在您的解决方案中添加一个新的类库项目。将您的公共代码放在其中。
  2. 根据需要向您的解决方案中添加尽可能多的WinForms项目。
  3. 向您的WinForms项目添加对类库项目的引用。

1

1

您还可以将同一项目添加到多个解决方案中。没有必要在一个解决方案中同时拥有服务器和客户端的输出。

换句话说,如果这些是您想在服务器和客户端中使用的项目:

Project A: CoreClasses
Project B: Entities

然后将它们添加到两个解决方案中:

 + Solution 1: Server
   +- Project A: CoreClasses
   +- Project B: Entities
   +- Project C: ServerSpecific -> output

 + Solution 2: Client
   +- Project A: CoreClasses
   +- Project B: Entities
   +- Project D: ClientSpecific -> output

在你的“主干(trunk)”中,它看起来会像这样:
 /trunk/
 /trunk/ProjectA/
 /trunk/ProjectB/
 /trunk/ProjectC/
 /trunk/ProjectD/
 /trunk/ClientSolution.sln
 /trunk/ServerSolution.sln

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接