Совместное использование кода между 2 проектами без DLL - PullRequest
22 голосов
/ 02 декабря 2010

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

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

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

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

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

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

Ответы [ 7 ]

34 голосов
/ 02 декабря 2010

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

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

12 голосов
/ 02 декабря 2010

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

alt text

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

2 голосов
/ 02 декабря 2010

Вы могли бы:

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

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

2 голосов
/ 02 декабря 2010

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

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

1 голос
/ 20 марта 2018

Necromancing - Согласно Visual Studio 2017 :

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

Он будет использовать framework-версию и библиотеки из проекта, из которого вы ссылаетесь на shared-проект.Вы также можете использовать один и тот же общий проект в нескольких проектах, если у вас нет конфликтов.

Это в основном статическое связывание на уровне исходного кода.Это также работает с HTML и JavaScript-файлами (в частности, с публикацией), но с файлами HTML и JS вы столкнетесь с проблемами при отладке ...

Это в разделе "Классический рабочий стол Windows", но вытакже используйте его для .NET Core и т. д.

enter image description here

0 голосов
/ 20 августа 2015

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


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

  • LDAPSyncLib
  • LDAPSyncSvc
  • LDAPSyncTest

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

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

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

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

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

0 голосов
/ 02 декабря 2010

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

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

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

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