Cписок зависимостей проектов
Кто-нибудь знает как можно быстренько получить список зависимостей проектов для нескольких солюшенов?
Т.е. где-то лежат
a1.sln
cc/b2.sln
dd/dd/cc/c3.sln
Нужны:
- список проектов в порядке построения
- список групп проектов которые можно строить параллельно
- список проектов которые должны быть построены до указанного проекта
Детали конфигураций пока вроде не требуются - достаточно просто имен и ГУИДов.
Запросы точно кошачьи - пожрать побольше
У решарпера есть архитектур въюв для солюшина и если еще что найти то будет тоже для солюшина. Всё остальное должно быть вне студии, что резко уменьшает вероятность исполнения.
https://marketplace.visualstudio.com/items?itemName=Visual...
https://www.ndepend.com/docs/dependency-structure-matrix-d...
Ну а чего мелочится - У меня ПрЫнцеска жрет почти столько же сколько и Я...
только во мне 105 и Я днем работаю, а в ней - 1.05 и она спит сутками...
В пределах одного солюшена Я могу попробовать сделать через EnvDTE
Но грузить Студию для каждого солюшника и как-то объединять - слишком долго займет.
Да и не визуализация мне нужна, а подходящий дамп в ХМЛ...
Так что хотелось бы простую читалку солюшника со списком ссылок на включенные проекты.
Должна же быть где-то либа которой пользуется Студия... или МсБуилд... или что-то стороннее...
а построитель матрицы смежности Я и так имею.
Две строки применительно к тексту солюшена меня смущают:
private static Regex projectDependenciesRegex = new Regex(@"ProjectSection\(ProjectDependencies\)\s=\spostProject(?<Data>.*?)EndProjectSection", RegexOptions.Singleline);
Match projectDependencyMatch = projectDependenciesRegex.Match(contents, m.Index, m.Length);
получается, что чел ожидает списка зависимостей в файле солюшена.
Смущает то, что Я их там никогда не видел...
Кто-нибудь их там находил? Как, кроме как руками, разумеется, создать?
Что то то не то ищешь. Начинай с парсера солюшина. Там вроде 3 варианта
-мелкософт, как самый неудобный
https://stackoverflow.com/questions/707107/parsing-visual-...
//internal class SolutionParser
//Name: Microsoft.Build.Construction.SolutionParser
//Assembly: Microsoft.Build, Version=4.0.0.0
https://msdn.microsoft.com/en-us/library/microsoft.build.c...
https://docs.microsoft.com/en-us/dotnet/api/microsoft.buil...
https://msdn.microsoft.com/en-us/library/microsoft.build.b...
-Parsing VS Solution files with Sprache
http://blog.spinthemoose.com/2013/05/05/parsing-vs-solutio...
-Solution Parser
https://www.nuget.org/packages/Onion.SolutionParser.Parser
https://github.com/ost-onion/SolutionParser
потом прийдется парсить проекты.
Хотя для зависимостей я бы начал с бинарников, а потом замапил бы на проекты.
Для солюшина получается что то типа этого
Я смотрел парсер солюшеона и проекта в MsBuild соурсах.
Но когда прикинул сколько надо перелопатить чтобы оно заработало как мне надо - пошел искать сурогат.
Нашел по первому приведенному линку.
Хороший или плохой - не важно - уже адаптировал под свои нужды.
Парсер проектов тал тоже присутствует.
Зависимости от бинарников меня сейчас не интересуют - сейчас мне интересны только зависимости от проектов
которые надо компилировать.
Хотя... надо пересмотреть твой первый линк - все ближе к стандарту...
Но дорабатывать там много - ребята поленились написать назначение нескольких пропертей... SolutionFile, SolutionDirectory...
Без них до проектов не добраться...
-мелкософт, как самый неудобный
-----
Он не просто "неудобный" - он еще и частично не рабочий.
В доках написано - ПроектВСолюшене имеет свойство Депенденсиес.
https://msdn.microsoft.com/en-us/library/microsoft.build.c...
типа public IReadOnlyList<string> Dependencies { get; }
В реальности же возвращается АррайЛист, который не кастится к заявленному IReadOnlyList<string>...
К тому же сами проекты так и не читаются и Депенденсиес так и остается пустым...
Видимо, где-то в дебрях мелкомягких была идея прописать зависимости в солюсhнике, но ее не реализовали...
им там делать нечего
-----
Полной спеки на файл солюшена Я так и не нашел, но в коде парсера присутствует попытка извлечь инфу об проекте и добавить ее к Зависимостям.
Но могут быть различные неожиданности типа ссылки
-----
Я сегодня успел поковырять нечто под названием QuickGraph.
Работать заставить не получилось, но посмотрел как можно лепить проекты.
Там таки полный пипец...
Надо будет изучить...
Я вот глянул что есть по зависимостям бинарников, тоже не густо. Бинарники хоть быстро обзор могут дать, а связать с солюшином может любой студент.
https://www.workshell.co.uk/products/netdepends/
https://www.codeproject.com/Articles/246858/Depends4Net-Pa...
https://github.com/isindicic/DependencyWalker.Net - не работает нормально но есть исходники
https://www.ndepend.com/docs/visual-studio-dependency-grap... - платное
А сколько у тебя солюшинов для одной проги?
А сколько у тебя солюшинов для одной проги?
-----
У меня одни и те же проекты используются в разных солюшенах. Временами получаются накладки - сделал для одного, что-то померло в другом... или - нельзя задеплоить - что-то не готово...
А для деплоемой проги вообще-то - два солюшена - один для разработки - в Студии 2015, другой для деплоймента - в Студии 2010. Билли там нахомутал с деплойментом...
Бинарники хоть быстро обзор могут дать
-----
Ну выбираются ссылки на либы - есть там список.
Но там именно список - не ресолвится до косвенно загружаемых либ.
ДепенденсиВалкер есть скомпилированный - вполне приемлемо работает. Но к соурсникам у меня старая слабость - люблю поковырять...
Временами получаются накладки - сделал для одного, что-то померло в другом...
Я так и не нашел нормального решения.
Вариант 1 - Если проект общий, то надо копировать его к основному проекту, чтобы он там и жил. Тогда любые изменения в общем проекте не будут влиять на основной. Проблема как исправлять ошибки во всех копиях. Промежуточное решение - пользовать ДЛЛ-ку
Тэгами и бранчами можно отменить копирование, но проблема синхронизации исправленных ошибо остается.
Вариант 2 - Линкуем все проекты к общему. Проблемы: компиляция общего через год и где аукнется очередное изменение.
Билли там нахомутал с деплойментом
А какого его для ентих целей пользовать?
И как ты собираешся эти два проекта в паралель компилить?
То бишь смысла в зависимостях не совсем понятно. Если бы CI был и большая куча солюшинов, тогда еще понятно.
не ресолвится до косвенно загружаемых либ
А кто тебе их до выполенения проги отрезолвит?
Промежуточное решение - пользовать ДЛЛ-ку
-----
Дллка - уже есть.
Сейчас вот где-то потеряно - собран набор дллок для веб-сайта, по дллке на страницу, общие бизнес-части вынесены - какая-то не пересобрана - сайт падает...
Мне бы их хотя бы оттестить в кучке....
А какого его для ентих целей пользовать?
-----
А оно так налажено было.
На новой версии - не пошло. Недолго думая поставил на ВМ Студию 2010 и задеплоил...
Так и живет... разбираться что надо налаживать - там права, сертификаты и протоколы - некогда...
Если бы CI был и большая куча солюшинов, тогда еще понятно.
-----
Вот ЦИ у меня и начинается. Сервак уже крутится, репорты - получаю.
Бодаюсь с конфигурацией - какую версию и из какого места тянуть, куда результат класть.
Недельку поковырялся - понял - руками - не сдюжу... Леплю список проектов из солюшенов
- буду генерить конфиги...
А кто тебе их до выполенения проги отрезолвит?
-----
В заголовках инфа должна быть... пусть и не вся...
общие бизнес-части вынесены - какая-то не пересобрана
Забил давно на это. Все что нужно в одну солюшин. Для копирования факе проект и затем rebuild all.
Бодаюсь с конфигурацией - какую версию и из какого места тянуть, куда результат класть.
Бесплатный небось взял. Понятно что никто не заплатит.
В платном просто готовую солюшин скарлимаешь и все
В заголовках инфа должна быть... пусть и не вся
Ну поищи где то в заголовках какие плагины могут подгружаться
Все что нужно в одну солюшин.
-----
Ну если бы Я мог...
У меня вот проблемка - Оракле.ДатаАццесс,длл для х32, тоже для х64 и Оракле.МанагетДатаАццесс.длл.
Хотел переползти на последнюю...
Все собрал... но где-то пропустил... в результате - сайт падает... и на тестовой - не воспроизводится... т.е. где-то что-то осталось от предыдущих деплоев...
В платном просто готовую солюшин скарлимаешь и все
------
У меня чуток по другому - Я скармливаю пакет солюшников... :) Как раз дописал екстаркцию проектов...
Да, кто будет ковырять солюшник извлекая что-то похожее - не надейтесь на то, что приводимое в примерах будет соответствовать тому что будет в реальности.
В реальности может быть как много меньше, так и много больше информации...
В частности - не всегда в файле проекта есть определение ПроектТип... и если правильно написать ссылку - его не будет и в солюшнике.
Как Студия без типа проекта разбирается какой Таргет и компилятор - так и не понял...
Ну поищи
------
Ну ведь написано - "пусть и не вся"!