MsBuild & папочки...
MsBuild & папочки...
Снова слегка запутался...
ВМ начала произвольно отключатся от хоста - как результат - не могу деплоить изменения в проектах.
Идея была заменить Студию обычным БАТ-файликом с вызовом MsBuild для каждого из проектов
и далее как-то сделать деплоймент.
Но! Запутался в папочках... :( в трех-четырех штуках... ну может в пяти...
Первая часть - Компиляция аппликатиона.
Три папочки определяются тремя параметрами:
/p:WorkingDirectory=%L4%\Builds\ImportWinApp
/p:OutDir=%L4%\Builds\ImportWinApp
%L4% - переменная среды хранящая "уровень вложенности" проекта, ну или по простому - часть релативного пути к месту результата...
Одна сложность - путь требуется относительно местоположения файла проекта.
Вроде как корректно поправил файлики проектов апппикейшена - все компилируется и складывается куда указано.
Вторая часть - Копиляция клиентов.
Клиенты у меня оформлены в дллки и должны лежать в папочке Clients.
Соответственно заменяю
/p:WorkingDirectory=%L4%\Builds\ImportWinApp
/p:OutputPath=%L4%\Builds\ImportWinApp\Clients
Первая нужна чтобы понять ссылки на компилированные дллки, вторая, как обычно, определяет куда выгружать сборку.
Вроде все правильно?
Ну Я надеюсь, что вы заметили разницу - OutDir & OutputPath?
Ну это мелочь... правда за исключением того, что второе понятно, а первое нет. Я не нашел как используется и используется ли первое. Только примеры с использованием.
Проблема похоже в том, что WorkingDirectory тоже не используется или используется только частично... возможно - где-то подменяется...
Но и без нее проект не компилируется...
Непонятно.
Дальше... папочка где лежит батничек... это - вообще отдельно. Т.е. - совсем. У меня ощущение что МсБуилд об ней не знает.
Тем не менее - она нужна - только от нее можно задать релативно копирование/перемещение полученных клиентских дллок.
Еще есть папочка Клиентов, куда надо копировать/перемещать построенные клиенты...
И есть папочки объектных файлов. Для Шарпа - не актуально, но используются.
В общем - Я так и не понял какие пути мне надо прописать в параметрах, чтобы МсБуилд взял корректные сорцы из одного места, уже откомпилированные библиотеки другого и сложил результат в третье...
П.С. Могу написать полный вызов Шарпового компилятора, но интересует решение на уровне МсБуилда.
Начинаю потихоньку звереть...
Простая команда:
%MSBUILD% /p:OutputPath=%L4%\%PRJDIR% @msbuild.config.dat .\Apps\CareyGlass.Apps\CareyGlass.Interfaces\CareyGlass.Interfaces.csproj >>%BLDLOG%
строит, как и ожидается, дллку с интерфейсами и кладет в указанную папку...
Вторая команда
%MSBUILD% /p:OutputPath=%L3%\%PRJDIR% @msbuild.config.dat .\..\Gps.Order\Gps.Order\GPS.Order.ColumnsDefs\GPS.Order.ColumnsDefs.csproj >>%BLDLOG%
строит, как и ожидается, дллку с представлениями колонок и кладет в указанную папку.
Первый проект не имеет никаких ссылок.
Второй проект не имеет никаких ссылок.
Вопрос:
Какого юха при построении второго проекта в месте хранения батничка создается структура папок по %PRJDIR% и туда копируется дллка интерфейсов?
Прописал дополнительно WorkingDirectory - полегчало:
%MSBUILD% /p:OutputPath=%L3%\%PRJDIR%;WorkingDirectory=%L4%\%PRJDIR% @msbuild.config.dat .\..\Gps.Order\Gps.Order\GPS.Order.Factory\GPS.Order.Factory.csproj >>%BLDLOG%
не создается структура папок в текущей папке...
Следующая напасть.
Перепутал последовательность построения проектов.
Тот из проектов, который нужен для текущего - строился позднее.
Прямых ссылок на требующийся проект, т.е. вида:
<ProjectReference Include="..\..\CareyGlass.Apps\CareyGlass.Interfaces\CareyGlass.Interfaces.csproj"><Project>{a0a574f4-33dc-4312-8ba7-0abd09cd7323}</Project><Name>CareyGlass.Interfaces</Name></ProjectReference>
в теле файла проекта нет - они все условные. Т.е. где-то задано Condition="..."
Из тех условий которые заданы вытекает использование готовой дллки в текущей рабочей папке.
Но там дллки нет - не построена еще...
Тем не менее - проект - собирается. Каким-то образом, игнорируя условия, ищется ссылка на проект и из папки объектников добывается построенная на предыдущем баче дллка.
Мрак...
Так в Студии для построения проектов ничего и не было!!!
Файл проекта лежал в папке.
Средства компиляции - тоже в папке, другой.
Все операции по сборке и управление ее процессом - МсБуилд.
Сама Студия только набор редакторов с визардами и вызов МсБуилд...
Все.
Уткнулся в новую напасть.
Перестроил солютион на по-проектное построение.
Вроде все работает как надо. По крайней мере все компилится и даже деплоится.
Одна проблема - деплоится "не туда"...
Путь куда деплоить - указан, но почему-то игнорируется... не понимаю...
Кто-нибудь может скинуть лог команд при деплойменте на сетевой/unc диск?
Кто еще не слышал как Я матерюсь по поводу известного мудака билли?
Ну сегодня Я готов не просто матерится, а матерится с надрывом...
Есть ClickOnce деплоймент визард.
Кто не знает - появляется в свойствах выполняемых проектов.
Там всего 3-4 формочки - проводка по заданию параметров деплоя - куда, откуда потом ставить, как менять версию и т.д. и т.п....
Результат выполнения без затей пишется в файл проекта. Прямо промежду остальной информации для построения.
Можно открыть проект до и после - разница будет видна вполне наглядно.
Из интересующих меня частей отмечу две: <InstallUrl> и <PublishUrl>
Две - потому как они у меня не совпадают.
Ну не вижу Я с виртуалки сеть - только через хост и его мапленные диски.
Пользователи - сеть видят и пользуют или унц-имена или мапленные диски.
Но не суть...
Визард - отработал и все что надо прописал.
Деплой из под Студии - идет. Ну мелочь с путаницей в протоколах опускаем.
А из батча - не идет.
Если точнее - из батча не подставляется прописанный <PublishUrl>, а подставляется <WorkingDirectory> (вроде, не трассировал).
Microsoft.Common.targets использование <PublishUrl> - прописано.
Правда прописано немного непонятно - конечный путь для деплоя выбирается из 5-6 вариантов... НО! При построении из батча оно не работает.
После поисков - нашел на стаковерфлове вариант - вместо <PublishUrl> пользовать <PublishDir>.
Да-да - вместо прописанного утрыковским визардом параметра - надо писать другой, нигде толком не описанный... да еще и похожий.
За полчаса непрерывного высказывания своего мнения об этом утерке - из цензурного только - писсец полный...
Угу... надо "понизится" на ступеньку и пендрючить вызовы компайлера и линкера...
Я как-то поковырял соурсники МсБилда... мягко говоря - сильно не понравилось...
хотел понять как у них сделана перестройка списков параметров и трасссировка...
но так и не разобрался... в чистую - нет, а кода - много...
Единственное что полезное вынул - у них интересно сделана обработка обработка
ошибок консольного приложения - перезапускают само из себя и отлавливают ехцептионы...
Очередной вопрос...
Студия, солюшен... примерно 80 проектов в солюшене... часть из них - тестовые...
Все строится, все деплоится и инсталится по ClickOnce...
Текущее состояние:
Инсталляция идет из одного источника, но в 3 разных места. Ну три разных фабрики...
Существенно - версии "клиентов" и версии продуцируемых файлов отличаются.
Конфликт решается в конфиге путем прописывания нужных параметров.
Текущая проблема:
После инсталляции имеется дефаултный конфиг, который в 2-х случаях из 3-х не соответствует требованиям.
Проще - прописаны три конфига, но только один из 3-х "паравильный" для текущей инсталляции.
Т.е. в двух случаях надо читать доку и править конфиг ручками. Редактор - могу сделать, но он лишний...
Вопросик:
Как описать загрузку нужного конфига?
Повторюсь - ClickOnce инсталляция.
Один из вариантов - усложнить проект с копированием только нужных файлов и сделать 3 разных инсталляции. В процессе и не интересует.