Да, я бы (и сделал) использовать NDepend для этого.Я работаю над продуктом, который предоставляет расширяемый API для разработчиков.Поэтому мы должны убедиться, что между выпусками мы не удаляем функциональность, от которой могут зависеть эти разработчики.С другой стороны, нам нужна гибкость, чтобы вырастить продукт без значительных ограничений в отношении реверсии.
Некоторые вещи, которые вы захотите рассмотреть.
- Изменение версии ссылочной версииDLL следует рассматривать как критическое изменение.
- удаление / изменение членов нарушает обратную совместимость.
- добавление членов нарушает совместимость (некоторые люди считают «добавленные элементы» безопасными, но у них естьсвязанный с риском).
- Изменяйте версию файла при каждой сборке, она вам понадобится в какой-то момент.
- Рассмотрите возможность написания контрактов, определяющих ваш «публичный API».Это будут члены, которых вам необходимо поддерживать за пределами организации.Думайте о них как о границах взаимодействия.Затем он позволяет вашим классам реализации иметь открытые члены, которых нет в API (следовательно, считается «неподдерживаемым»), поэтому вы можете изменять их, не беспокоясь о нарушении API расширяемости.Расширение API состоит из написания нового интерфейса (с номером версии в имени интерфейса), который НЕ является производным от предыдущей версии интерфейса (деривация не позволяет полностью отказаться от членов и создает ад, когда приходит время реализовать несколько версий интерфейса.в одном классе.
- Не забывайте об атрибутах, изменения в них могут не нарушать статическую совместимость, но могут повлиять на время выполнения.