单一解决方案中的多个应用

时间:2012-01-23 16:16:46

标签: c# winforms client multiple-projects

我相信这是可能的,但不确定如何解决它,我需要创建一个服务器/客户端解决方案,通常我会为服务器创建一个新的解决方案,并为客户端创建一个新的解决方案,但我希望这样做在一个解决方案中,因为它们都使用相同的自定义类,并且不需要两次更改同一文件的问题。

所以问题是我可以在单个解决方案中创建多个exe,以及实现此目的的步骤是什么。

我在这里搜索但是没有完全理解这个程序,所以如果有人能指出我在一般的正确方向上会很棒。 :)

VS2010使用C Sharp和Windows Forms

7 个答案:

答案 0 :(得分:10)

  

请参阅我在跨平台客户端服务器应用程序开发时提供的 this this 之前的回答,特别是跨代码重用多个客户。这也适用于您的Winforms客户端服务器应用程序。

正如许多答案所说,您可以构建解决方案,以便按如下方式共享代码:

项目结构

  


  .. Common(Messages,Datacontracts,Utilities)
  ..中间件(参考文献通用,提供共同服务)
  .. .. Server Exe(参考文献Common,Middleware)
  .. .. Client Exe(参考文献通用,中间件)

顶级客户端 - 服务器架构

Cross-platform application stack

您的筹码

  

客户:

客户端具有webservices / middleware的序列化,客户端实现以及视图的Model-View-Presenter patterns

  

中间件:

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

  

消息/ DataContracts:

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

  

服务器:

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

开发和调试

是的,解决方案可以有多个exe,只需右键单击Server Exe或Client Exe来调试其中一个,只需使用set Startup Project即可。

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

致以最诚挚的问候,

答案 1 :(得分:2)

首先,确保您可以在解决方案资源管理器中查看解决方案文件:

转到Tools->Options。然后在Projects and Solutions下,确保选中Always Show Solutions

然后,在解决方案资源管理器(右上角,项目文件所在的位置)右键单击您的解决方案(在项目图标上方),然后单击Add->New Project


就解决方案的布局而言,您将拥有3个项目,客户端项目,服务器项目和共享类的类库项目。

您的客户端和服务器项目将引用库项目,请参阅:Project Reference (MSDN)


另请参阅:Multi-Project Solutions (MSDN)

答案 2 :(得分:1)

你会这样做:

  1. 有一个解决方案
  2. 向解决方案添加三个项目:
    1. 项目A:服务器exe
    2. 项目B:客户端exe
    3. 项目C:包含项目A和B使用的类的类库项目。
  3. 制作项目A和B参考项目C

答案 3 :(得分:1)

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

答案 4 :(得分:1)

  1. 向您的解决方案添加新的类库项目。把你的公共代码放在那里。
  2. 添加解决方案所需的许多WinForms项目。
  3. 将对类库项目的引用添加到winforms项目中。

答案 5 :(得分:1)

单个解决方案中的多个项目没有什么特别之处 - VS 2010完全支持这一点,请参阅http://msdn.microsoft.com/en-us/library/23x5fk78.aspx

答案 6 :(得分: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