【问题标题】:Multiple applications in single solution单一解决方案中的多种应用
【发布时间】:2012-01-23 16:16:46
【问题描述】:

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

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

我在这里搜索过,但不完全理解程序,所以如果有人能指出我大致正确的方向,那就太好了。 :)

VS2010 使用 C Sharp 和 Windows 窗体

【问题讨论】:

  • 只需添加任意数量的项目并构建您的解决方案。
  • 您在寻找Multi-project solutions吗?
  • 我认为在真正回答您的问题之前,您需要更具体地了解此客户端服务器将执行哪种类型的应用程序。它是传统的 FAT 客户端、瘦客户端、WPS 等。 . 然后指定应用程序应该做什么,然后可以从那里提出一个有效的解决方案..
  • 系统基本上应该输出两个可执行文件,使用ISS安装会选择正确的安装,它是一个简单的支持台软件,所以有一个程序供客户安装在他们的通知区域,公司机器上的另一个区域,因此当提出新票时,它会弹出通知。
  • 你是说线程分析还是威胁面分析,@mekici

标签: c# winforms client multiple-projects


【解决方案1】:

请参阅 thisthis 以前的答案,我在跨平台客户端服务器应用程序开发中给出的答案,特别是跨多个客户端的代码重用。这也适用于您的 Winforms 客户端服务器应用程序。

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

项目结构

解决方案
.. 通用(消息、数据合同、实用程序)
.. 中间件(引用Common,提供公共服务)
.. .. 服务器 Exe(参考通用、中间件)
.. .. 客户端Exe(参考通用,中间件)

顶级客户端-服务器架构

你的堆栈变成

客户:

客户端有序列化、webservices/middleware 的客户端实现和视图的Model-View-Presenter patterns

中间件:

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

消息/数据合同:

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

服务器:

所有业务逻辑、数据库访问和服务器端服务实现。对于 DB Access,我推荐 PetaPoco 作为出色的 MicroORM。

开发调试

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

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

最好的问候,

【讨论】:

  • @Neo 谢谢!我希望这不是矫枉过正。我从您的问题中得到了印象,您也不确定一般的客户端/服务器架构,而不仅仅是项目设置。项目部分在VS2010中其实很简单。只需添加多个 Exe 并使用 Set Startup Project。困难的部分是如何对代码进行分区,以实现关键逻辑、类等的有效共享和重用。我的建议是,不要创建太多项目。我最近在客户端/服务器环境中使用 97 个项目开发了一个应用程序 :( 那并使用接口/抽象,最重要的是 依赖注入
  • 嗨,安迪,一点也不夸张VS方面的东西,因为它不是最友好的环境!我对你在帖子中提到的几个项目感兴趣,MVP? MVVM?你还有关于 PetaPoco 的更多信息吗?听起来很有趣。
  • @Neo 很抱歉,上面的很多内容是对以前问题的重新散列(如已声明)。我将编辑 MVVM,因为它不适用于您的 winforms。 MVP 是 Model View Presenter,我建议您将其作为在 winforms 中开发 GUI 代码的最佳实践。 Petapoco 是一个 C# 对象关系映射库 - 1500 行 - 它的微型但非常强大。如果您的服务器是用 php 实现的,这也将不适用
【解决方案2】:

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

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

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


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

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


另见:Multi-Project Solutions (MSDN)

【讨论】:

    【解决方案3】:

    你会这样做:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:
        1. 向您的解决方案添加一个新的类库项目。把你的通用代码放在那里。
        2. 将您需要的多个 WinForms 项目添加到您的解决方案中。
        3. 将类库项目的引用添加到您的 winforms 项目中。

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

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

            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
            

            【讨论】:

              猜你喜欢
              • 2011-11-17
              • 2012-03-15
              • 2021-06-21
              • 1970-01-01
              • 2012-02-07
              • 2012-02-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多