Несколько приложений в одном решении - PullRequest
4 голосов
/ 23 января 2012

Я полагаю, что это возможно, но не знаю, как обойти это, мне нужно создать решение сервер / клиент, обычно я хотел бы создать новое решение для сервера и новое для клиента, однако я ищу этов одном решении, так как они оба будут использовать одни и те же пользовательские классы и на самом деле не хотят, чтобы проблема меняла один и тот же файл дважды.

Итак, вопрос в том, могу ли я создать несколько exe-файлов в одном решениии каковы шаги для достижения этого.

Я искал здесь, но не полностью понимаю процедуру, поэтому, если кто-то может указать мне в общем правильном направлении, это было бы здорово.:)

VS2010 с использованием C Sharp и Windows Forms

Ответы [ 7 ]

10 голосов
/ 23 января 2012

Пожалуйста, смотрите это и это предыдущий ответ, который я дал на разработку кросс-платформенного клиент-серверного приложения, особенно с кодом- повторно использовать для нескольких клиентов. Это также применимо к вашему клиент-серверному приложению Winforms.

Как говорится во многих ответах, вы можете структурировать свое решение для совместного использования кода следующим образом:

Структура проекта

Решение
.. Common (сообщения, контракты, утилиты)
.. Middleware (References Common, предоставляет общие услуги)
.. .. Server Exe (Справочные материалы, промежуточное ПО)
.. .. Client Exe (Справочные материалы, промежуточное ПО)

Клиент-серверная архитектура верхнего уровня

Cross-platform application stack

Ваш стек становится

Клиенты:

Клиент имеет сериализацию, реализации на стороне клиента веб-сервисов / промежуточного программного обеспечения и модели Model-View-Presenter для представления.

Промежуточное программное обеспечение:

Промежуточное программное обеспечение, т.е. общие службы и реализация транспорта данных на сервере / клиентском компьютере, могут быть одинаковыми. В качестве альтернативы вы можете позвонить в эту Службу. Любые конкретные службы только для клиента (или только для сервера) должны идти в отдельных сборках, на которые ссылается только конкретный exe (клиент или сервер). т.е. не делитесь кодом, который не передается!

Сообщения / DataContracts:

Совместно используется всеми клиентами / серверами с использованием методов, описанных выше. В вашем случае это могут быть общие доменные объекты, совместно используемые клиентом и сервером

Сервер:

Все реализации бизнес-логики, доступа к БД и обслуживания на стороне сервера. Для доступа к БД я бы рекомендовал PetaPoco в качестве отличного MicroORM.

Разработка и отладка

Да, решение может иметь более одного exe-файла, просто используйте set Startup Project , щелкнув правой кнопкой мыши на Server Exe или Client Exe для отладки одного или другого.

Если вы хотите запустить клиент и сервер вместе, вы можете запустить как из командной строки, так и подключить отладчик к обоим процессам.

С уважением,

2 голосов
/ 23 января 2012

Сначала убедитесь, что вы видите файл решения в обозревателе решений:

Перейдите на Tools->Options.Затем в Projects and Solutions убедитесь, что отмечен Always Show Solutions.

Затем в обозревателе решений (вверху справа, где находятся файлы вашего проекта) щелкните правой кнопкой мыши ваше решение (чуть выше значка вашего проекта), затем нажмите * 1008.*.


С точки зрения компоновки решения у вас будет 3 проекта, проект клиента, проект сервера и проект библиотеки классов с общими классами.

Ваши клиентские и серверные проекты будут ссылаться на проект библиотеки, см .: Ссылка на проект (MSDN)


См. Также: Многопроектные решения (MSDN)

1 голос
/ 23 января 2012

Вы также можете добавить тот же проект в несколько решений .Нет необходимости в выводе как сервера, так и клиента в одном решении.

Другими словами, если это проекты, которые вы хотите использовать как на сервере, так и на клиенте:

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
1 голос
/ 23 января 2012

Нет ничего особенного в нескольких проектах в одном решении - VS 2010 полностью это поддерживает, см. http://msdn.microsoft.com/en-us/library/23x5fk78.aspx.

1 голос
/ 23 января 2012
  1. Добавьте новый проект библиотеки классов в свое решение. Поместите туда свой общий код.
  2. Добавьте в ваше решение столько проектов WinForms, сколько вам нужно.
  3. Добавьте ссылки на проект библиотеки классов в ваши проекты winforms.
1 голос
/ 23 января 2012

Можно щелкнуть правой кнопкой мыши значок решения, расположенный вверху в обозревателе решений, и выбрать вариант добавления нового проекта.

1 голос
/ 23 января 2012

Вы бы сделали это так:

  1. Есть одно решение
  2. Добавьте три проекта к решению:
    1. Проект A: Сервер exe
    2. Проект B: клиент exe
    3. Проект C: проект библиотеки классов, содержащий классы, используемые проектами A и B.
  3. Сделать проект A и B эталонным проектом C
...