Я ищу способ обнаружения проблем со ссылками на сборки в большом решении Visual Studio:
- Двоичные ссылки на неверные местоположения, например, путь не в системе управления версиями или в выходных данных другого проекта.
- Двоичные ссылки на несколько версий одной и той же сборки в проектах решения.
- Двоичные ссылки без пути, которые могут быть перенаправлены в GAC
- Двоичные ссылки, которые должны были быть ссылками на проект
Вся история
Я работаю над большим проектом C#, в котором почти 200 проектов. Одна из проблем, которая возникает со временем, заключается в том, что ссылки на сборки добавляются, но не всегда на одну и ту же версию или в правильное место.
Например, проект может получить ссылку на System.Web.Mvc без пути подсказки, что заставит его ссылаться на любую версию, которая есть в GAC. Visual Studio (и Resharper) также предложит добавить отсутствующую ссылку, но может сделать это, добавив ссылку на выходную папку другого проекта.
Теперь недавняя катастрофа Центра обновления Windows оставила некоторых членов команды мертвыми в воде, неспособными создать решение. Как вы понимаете, это повысило для нас приоритет управления ссылками на сборки.
Чтобы обнаружить некоторые из наиболее очевидных проблем, я уже настроил файл msbuild, который можно включить в каждый файл csproj и который будет обнаруживать плохие ссылки.
Однако новые файлы проекта необходимо будет отредактировать вручную, чтобы включить этот скрипт. Так что это неизбежно забудется.
Что бы я действительно хотел, так это проверить все файлы проекта в решении на наличие «плохих» ссылок во время непрерывной сборки, чтобы все проекты всегда проверялись.
Я некоторое время искал подобное решение и нашел множество инструментов статического анализа и анализа кода, но ничего для анализа файлов проекта в решении.
Итак, прежде чем я уйду и разверну свое собственное решение, есть ли уже способ сделать это?
Обновить
Чтобы очистить кодовую базу, я создал немного кода ScriptCS, который будет сканировать все файлы csproj на наличие ссылок на сборки в пакетах Nuget и исправлять их. Это на GitHub.