Как правильно организовать два Solution с общим проектом, чтобы...?
Суть проблемы наверное в кривой архитектуре:
есть два Solution, в каждом из которых подключен один и тот же общий проект, условно наз Core.
Server_Solution = (условно Server(с#)+Core(с#) ) отлаживается и запускается на сервере.
Client_Solution = (условно Client(с++)+Core(с#) ) отлаживается на сервере, запускается на удаленных клиентах - условно игровой бот с AI, запущенный на GPU VPS/VPS
Все проекты обоих Solution собираются в одну папку на сервере: условно \\server\c$\bin
Каждый клиент отслеживаются изменение версий файлов в Client+Core, и автоматически перезапускается при принятых(утвержденных) обновлениях в режиме отладки из VisualStudio 2019.
Сервер запускается в режиме отладки из VS на \\server
При нахождении глюков в работе какого либо клиента на сервере вносятся изменения в "Client", и иногда в "Core"(условно добавляются новые фичи, изменяются старые) проект Client_Solution пересобирается. Тестовый Client видит изменения и перезапускается. Остальные работают на старой версии.
Проблема:
Я не могу пересобрать Client_Solution не выключив работающую Server_Solution, так как она содержит тот же Core проект, который уже запущен из \\server\c$\bin как Server_Solution.
Но мне надо, чтобы сервер продолжал работать со старой версией, чтобы я мог интерактивно наблюдать разницу поведения старых и новых клиентов. Также сервер не желательно перезапускать, так как он содержит условное "состояние мира".
Вопрос;
как правильно организовать размещение файлов\структуру Solutions \ процесс отладки в моем случае.
Возможно надо сделать два независимых "Core", которые будут как-то синхронизироваться, но это жуткий доп геморрой, так Core на самом деле микс из 10+сборок, которые также обновляются.
PS варианты с контролем версий не предлагать, так как у
меня есть отдельное приложение которое закачивает измененные .cs/ .cpp с сервера и пересобирает из них Client_Solution на клиентах - мне удобно только так и всё устраивает.
wlastas, не забывай делать упоминания пользователей. Иначе твои слова не видно. Я сейчас в твой вопрос зашел просто потому что увидел отметку о решении.
Выбранное решение не решает твой вопрос. Оно просто обходит проблему, которую я обозначил тебе.
У тебя конфигурация сборки неправильная. Твои Intermediate и Output Path должны быть строго относительно $(SolutionDir). Никаких абсолютных путей. Никаких путей относительно проекта. Никаких висящих в воздухе путей. Все должно быть строго от корня солюшена.
В этом случае один проект, открытый в двух солюшенах, будет иметь разное рабочее окружение. Только так проект не будет мешать сам себе в разных солюшенах.
Евгений Шатунов,
В VS 2016 для С# проектов использовать $(SolutionDir) можно только в отредактировав .csproj в текстовом редакторе в ручную^^ - из редактора у меня сие не получилось.
Я правильно понимаю, что при использовании $(SolutionDir) как
папки packages(при исп NuGet из студии) и Bin (куда все компилится) ВСЕГДА будут внутри той папки в которой находится .sln и придется отдельно позаботиться, чтобы их содержимое не попадало в бекапы?
wlastas, VS 2016 не существует.
И переменную в настройках можно поставить не только прямым редактированием формата проекта.
Я не понимаю, о каких бекапах ты пишешь. Если что-то уже позиционируется от солюшена, это уже хорошо и главное - чтобы солюшены находились просто в разных папках. Если что-то не должно попадать в VCS, то это надо просто добавить в игнор VCS.
Евгений Шатунов, VS 2019* конечно
Да нету никакой VCS. У меня тупо раз в 3 часа автоматом зипуются рабочая папка с:\Stas\ в которой все актуальные проекты и скидывается на бекап диск + на соседний PC - просто Visual Basic сервис в пару строк написанный лет 15 назад^^
А никак. :)
Если бы я хотел решение на этот вопрос, я бы сразу написал его как ответ. Но я этого не сделал по объективным причинам.
Если ты разобрался и решил свой вопрос, у тебя есть возможность написать ответ самостоятельно и отметить его решением.
Евгений Шатунов, ах вот он что.
Скажу как человек "со стороны", написавший свой первый сайт 20 лет назад (www.larson.ru)- этот местный "двойной стандарт" написания сообщений крайне спорная хрень - я вот вообще допер до того что мне кто-то отвечает только на вторые сутки.
Уведомления, кстати, тоже не работают - хотя галочки в настройках стоят, а скрывать новые ответы "по умалчиванию" - вообще бред.
Сам сайт кстати тоже подтормаживает периодически - поверте я на гигабитном канале сижу и вижу.
у тебя есть возможность написать ответ самостоятельно и отметить его решением.
у меня видно только это.
Вы уже отвечали на вопрос
Если хотите что-то добавить, то можете
отредактировать свой ответ.
Это значит что я должен дополнить(переделать) свое предыдущее сообщение, хотя я может быть хочу его оставить для истории.
В любом случае еще раз спасибо $(SolutionDir) круто помог - я прям не нарадуюсь теперь
Правильным решением оказался вариант, предложенный Евгений Шатунов Куратор тега C++
У тебя конфигурация сборки неправильная. Твои Intermediate и Output Path должны быть строго относительно $(SolutionDir). Никаких абсолютных путей. Никаких путей относительно проекта. Никаких висящих в воздухе путей. Все должно быть строго от корня солюшена.
В этом случае один проект, открытый в двух солюшенах, будет иметь разное рабочее окружение. Только так проект не будет мешать сам себе в разных солюшенах.
Вообще не понял вашей идеи.
Как я буду пересобирать этот общий sln БЕЗ перезапуска сервера?
Мне надо интерактивно видеть/отлаживать/сравнивать данные приходящие со старых и новых клиентов.
"скопировал бы Core" а можно чуть подробнее?
wlastas, ну просто пусть будет по своей копии проекта для каждого решения.
А про сборку без перезапуска не понял.
Что страшного в остановке приложения?
wlastas, может просто не будете запускать его через ctlr+f5, а будете соьирать в Release и копировать в кубниьудь папку бинари?
По тому что тут проблема от того, что ктото просто не хочет пользоваться инструментами как задумано.
Это выглядит так, будто вы неправильно держите плоскогубцы и жалуетесь, что вам пальцы прищемило
Запуск продакшен из Debug/bin не очень хорошая идея. Продакшн должен публиковаться и крутиться на сервере. А версия из Debug/bin должна запускаться только IDE VS.
Понятно, что Вы уже к чему-то привыкли, но лучше привыкать к общепринятым шаблонам.
В Вашей ситуации стоит:
1. Начать публиковать рабочую версию (продакшен, релиз) на сервере;
2. Реализовать логгирование в БД, чтобы понимать - что происходит;
3. Продумать - как работать с отладочной (Debug) версией кода. И как потом ее беспроблемно релизить.