Вопрос
Существует ли стандартное решение, которое обнаружит (рекурсивно) все зависимости данного файла проекта 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, на которые есть ссылки.
Спасибо!