Как тиражировать функциональность «обнаруженных зависимостей» проекта установки Visual Studio? - PullRequest
2 голосов
/ 27 сентября 2011

Вопрос

Существует ли стандартное решение, которое обнаружит (рекурсивно) все зависимости данного файла проекта Visual Studio?Это в основном то, что делает функциональность «обнаруженных зависимостей» проекта установки Visual Studio - но мне нужен программный доступ к списку зависимостей (в идеале из MSBuild).

Фон (читайте, если хотите знатьо фактической проблеме, которую я пытаюсь решить)

Я работаю над автоматизированной сборкой приложения WinForms, которое использует сторонние библиотеки пользовательского интерфейса.Для успешной сборки приложения библиотеки должны быть «установлены» (через установщик поставщика) на компьютерах сборки / разработки (это помещает сборки в GAC и устанавливает компоненты лицензирования).Затем на DLL-файлы поставщика нужно ссылаться через GAC в наших файлах проекта.К сожалению, нет способа избежать этого требования «установки» (я хотел бы использовать локальные ссылки, которые извлекаются из моей системы контроля версий, как я это делаю почти со всеми другими ссылками третьих сторон, но это невозможно в этомcase).

Мы используем архитектуру «плагинов», поэтому исполняемый проект напрямую не ссылается ни на один из этих компонентов - на них все косвенно ссылаются через проекты «плагинов» (на которые в свою очередь ссылаютсяисполняемый проект).Следовательно, установка ссылок GAC на «copy local = true» в проектах «plugin» только копирует dll поставщика в выходной каталог проекта плагина;они не копируются рекурсивно в выходной каталог исполняемого проекта.Следовательно, развертывание xcopy выходного каталога исполняемого проекта не работает на компьютере без установленных dll-файлов поставщика, поскольку их нет в выходном каталоге.

В настоящее время мы используем развертывание msi (через установку Visual Studioпроект) и хотел бы перейти к развертыванию xcopy.В настоящее время dll-поставщики упаковываются в нашу msi, потому что зависимость «обнаруживается» независимо от того, какая магия происходит в функциональности «обнаруженных зависимостей» проекта установки.Мое решение для развертывания xcopy - просто потребовать, чтобы исполняемый проект напрямую ссылался на библиотеки поставщика, используемые его ссылочными плагинами, с параметром "copy local", установленным в true.Чтобы убедиться, что все необходимые библиотеки поставщика были упомянуты таким образом, я хотел бы сгенерировать список «обнаруженных зависимостей» исполняемого проекта, заявить, что все эти зависимости присутствуют в выходном каталоге исполняемого проекта, и завершить сборкуесли они не все присутствующие.

Я мог бы сделать это сам, проанализировав файл csproj, составив список всех записей «Reference» и рекурсивно следуя ссылкам проекта.Тем не менее, я надеюсь, что где-то есть постоянная функциональность, которая делает это, особенно с учетом того, что «обнаруженные зависимости» достаточно умны, чтобы отфильтровать библиотеки среды, но включают в себя мои библиотеки поставщика GAC, на которые есть ссылки.

Спасибо!

1 Ответ

0 голосов
/ 28 сентября 2011

Скорее всего, вы можете решить это с помощью Reflection - ваши плагины и их хост, скорее всего, имеют общий интерфейсный контракт.Ваш код будет сканировать все сборки на предмет использования набора известных интерфейсных контрактов после их создания и добавлять / обновлять их в проекте установщика с помощью автоматизации расширяемости IDE.Написание плагина, который выполняет это обновление вручную, может быть одним из вариантов, написание и регистрация задачи MSBuild лучше.

Я знаю, что это не «стандартное решение», но объем требуемой работы должен быть меньше одного.KLOC.

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