2012-01-23 3 views
4

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

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

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

VS2010 с помощью C Sharp и Windows Forms

+1

Просто добавьте столько проектов, сколько хотите, и постройте свое решение. –

+0

хорошо, а как насчет threating? –

+0

Я думаю, прежде чем вы сможете ответить на свой вопрос, вы должны быть более конкретным относительно того, какой тип приложения будет выполнять этот клиентский сервер .. это традиционный клиент FAT, тонкий клиент, WPS и т. Д., Затем укажите, что приложение предположим, что можно сделать, и можно предположить, что существует действующая душа. – MethodMan

ответ

10

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

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

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

Solution
.. Общие (сообщения, Datacontracts, Утилиты)
.. Middleware (ссылки Common, предоставляет общие службы)
.. .. Server Exe (ссылки Common, Middlew есть)
.. .. Клиент Exe (Ссылки Общие, Middleware)

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

Cross-platform application stack

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

Клиенты:

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

Промежуточный:

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

сообщение/DataContracts:

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

Сервер:

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

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

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

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

С наилучшими пожеланиями,

+0

Фантастический ответ Энди! – Neo

+0

@Neo благодарю вас! Надеюсь, это не перебор. У меня сложилось впечатление, что вы также не уверены в общей архитектуре клиент/сервер, а не только о настройке проекта. Часть проекта на самом деле очень проста в VS2010. Просто добавьте несколько Exe и используйте Set Startup Project. Трудная часть состоит в том, как разделить свой код, чтобы обеспечить эффективный обмен и повторное использование ключевой логики, классов и т. Д. Мой совет, не создавайте слишком много проектов. Я работал над одним приложением в последнее время с 97 проектами в среде клиент/сервер: (Это и использование интерфейсов/абстракций и, прежде всего, ** Injection of Dependency ** –

+0

Привет, Энди, нет, не переусердствуйте вообще не так в моей книге :) I интегрировали несколько клиентских серверных приложений, используя пользовательский php api, который я создал, поэтому интеграция не является проблемой, потому что это была главным образом сторона VS, поскольку она не самая дружелюбная среда! Меня интересуют несколько предметов, которые вы указали в своем посте, MVP? MVVM? Также у вас есть дополнительная информация о PetaPoco, поскольку это звучит интересно. – Neo

2

Во-первых, убедитесь, что вы можете увидеть файл решения в обозревателе решений:

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

Затем в проводнике решений (вверху справа, где находятся файлы вашего проекта) щелкните правой кнопкой мыши по вашему решению (чуть выше значка вашего проекта), затем нажмите Add->New Project.


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

клиент и сервер проектов будет ссылающихся проект библиотеки, см: Project Reference (MSDN)


Смотрите также: Multi-Project Solutions (MSDN)

1

Вы бы сделать это следующим образом:

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

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

1
  1. Добавить новый проект Библиотеки классов в ваше решение. Поместите там свой общий код.
  2. Добавьте как много проектов WinForms, которые вам нужны для вашего решения.
  3. Добавьте ссылки на проект библиотеки классов в ваши проекты winforms.
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 

 Смежные вопросы

  • Нет связанных вопросов^_^