2010-12-02 3 views
20

Как я могу использовать совместное использование кода между двумя проектами без создания dll?Обмен кодом между двумя проектами без dll

Проблема: у меня есть инструмент, который синхронизирует пользователей & групп из LDAP в базу данных.

Теперь инструмент является сервисом Windows, но тестирование его как такового очень сложно и требует много времени.

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

Но ... сохранение общих файлов в синхронизации - это немного проблема. Я не хочу, чтобы сделать DLL, потому что это, вероятно, создает мне проблемы с 3-й проект, установщик Windows (для службы), где я должен использовать ExecutingAssembly путь ...

Есть ли способ делиться кодом, не создавая отдельную dll? Автоматическая статическая связь, так сказать?

+0

Возможно, вам понадобятся новые и новые символические ссылки. – CodesInChaos 2010-12-02 15:27:01

+0

@CodeInChaos, нет возможности хранить символические ссылки в sourcecontrol/backups легко - вы делаете оба из них, правильно? =) – Rob 2010-12-02 15:30:35

+0

http://stackoverflow.com/questions/954560/what-does-git-do-to-files-that-are-a-symbolic-link звучит как git-хранилище sym-ссылок как sym-links. Не знаю, работает ли он на окнах, хотя я пока не использую Vista. И в зависимости от варианта использования может быть достаточно добавить символическую ссылку в файл игнорирования и вручную создать ее для каждого кодера. Немного хакерский, но должен работать. – CodesInChaos 2010-12-02 15:51:55

ответ

29

How about adding a file as a link.

В Visual Studio щелкните правой кнопкой мыши на вашей консоли тест приложения проекта -> выберите добавить существующий файл -> в файле добавить диалог перейдите к файлам в Вашем проекте службы Windows -> выбрать файлы, которые вы хотите поделиться -> и при добавлении кнопки выберите добавить ссылку.

2

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

Другой вариант - поместить оба проекта в одну папку. Добавьте класс в один, затем в другом проекте добавьте существующий класс и укажите только что созданный класс.

2

Вы могли:

  • сохранить общий код в отдельный проект, который производит DLL, а затем использовать инструмент, как ILMerge превратить DLL & EXE в одну сборку.
  • обмениваться исходными файлами между несколькими проектами, либо подделывая ваши файлы проектов, либо делая что-то напуганное с помощью макета исходного дерева.

Все, что было сказано, лучшим подходом было бы укусить пулю и сохранить общий код в общей сборке (DLL). Что происходит, когда вы решаете, например, разоблачить этот код через службу WCF? Это начинает усложняться, поскольку у вас есть 3 места, которые ссылаются на одни и те же файлы кода. Не просто подумайте о том, что делает вашу жизнь проще всего, подумайте о том, что сделает вашу жизнь (и всех остальных, кто должен поддерживать код) еще проще и в будущем! =)

9

Вы можете добавить файл в проект как ссылку. В диалоговом окне «Добавить существующий элемент» кнопка «Добавить» имеет выпадающее меню справа. Используйте, чтобы выбрать «Добавить ссылку»:

alt text

Поместите файл в качестве элемента решения и добавить ссылку к каждому проекту.

0

Если вы хотите поделиться функциональностью, вы должны использовать DLL или что-то подобное.

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

Если вы используете Visual SourceSafe, вы можете установить связь между двумя папками. VSS будет убедиться, что они рассматриваются как один и тот же файл.

0

Я расскажу о настройке, которую мы используем для управления и тестирования наших проектов Windows Service. Хотя это не отвечает на вопрос «обмен кодом без DLL» (ответ Унмеша позаботится об этом), я думаю, что OP, вероятно, не понимает, насколько это просто с DLL. В любом случае, я надеюсь, что это поможет кому-то.


Создать решение, LDAPSync. Создание трех проектов в этом решении:

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

LDAPSyncLib является DLL проект, который содержит все бизнес-логики и основной функциональности.

LDAPSyncSvc проект службы Windows, который содержит два класса, сервис класса контроллера, который наследует от ServiceBase, и класса для обслуживания. Этот проект имеет ссылку на проект LDAPSyncLib.

LDAPSyncTest является либо графическим приложением (WinForms, WCF и т. Д.), Либо консольным приложением, в зависимости от ваших потребностей. Этот проект также имеет «ссылку на проект» на LDAPSyncLib. Его единственная цель - предоставить некоторый интерфейс, который позволяет вам легко выполнять требуемые вызовы в вашей бизнес-логике для целей тестирования. В Visual Studio установите это как «StartUp Project».

Теперь, когда вы запускаете отладку через Visual Studio, вы получите красивый небольшой графический интерфейс или командное окно, которое вы можете использовать для проведения тестовых вызовов вручную. Когда вы устанавливаете его как службу Windows, класс контроллера LDAPSyncSvc берет на себя и обрабатывает все необходимые запросы на обслуживание (запуск, остановка, пауза и т. Д.).

У нас есть около 30 внутренних проектов Windows Service, которые мы постоянно управляем, разрабатываем и тестируем уже более десяти лет, и этот рабочий процесс оказался неоценимым в быстром поиске и исправлении ошибок при их возникновении. Желаем удачи в вашем проекте, и я надеюсь, что это поможет некоторым будущим Googlers.

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