Подтвердить что ты не робот

Обмен кодом между двумя проектами без dll

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

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

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

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

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

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

4b9b3361

Ответ 1

Как добавить файл в качестве ссылки.

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

Ответ 2

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

alt text

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

Ответ 3

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

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

Ответ 4

Вы можете:

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

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

Ответ 5

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

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

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

Ответ 6

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


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

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

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

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

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

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

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