Обнаружение критических изменений в коде .NET с использованием TFS? - PullRequest
11 голосов
/ 31 августа 2011

Я хотел бы обнаружить критические изменения в коде .NET (особенно в C #) всякий раз, когда TFS создает решение.Если есть какие-либо критические изменения (например, изложенные в " Определенное руководство по изменениям API в .NET ") между проверяемым кодом и версией в последней успешной сборке, я бы хотелзнать об этом.Срочные изменения не должны вызывать сбой сборки.Если не считать приложение, которое использует отражение для сравнения двух версий одной и той же сборки, как это можно сделать?

Ответы [ 4 ]

6 голосов
/ 10 июня 2012

Чтобы немного проработать ответы Джеймс и Адам , я хотел бы предоставить подробную информацию о обнаружении критических изменений с помощью NDepend и его кода запроса и править возможности. Отказ от ответственности: я один из разработчиков инструмента

NDepend развился и язык запросов. Если вы загружаете пробную версию NDepend и анализируете две версии базы кода, в которой вы хотите искать прерывания изменений, загляните в группу правил кода по умолчанию Изменения API для следующего CQLinq правила .

Выполнение одного из этих правил кода выглядит, например, (разница между NUnit v2.5.8 и v2.5.3):

API breaking changes

5 голосов
/ 12 сентября 2011

Да, я бы (и сделал) использовать NDepend для этого.Я работаю над продуктом, который предоставляет расширяемый API для разработчиков.Поэтому мы должны убедиться, что между выпусками мы не удаляем функциональность, от которой могут зависеть эти разработчики.С другой стороны, нам нужна гибкость, чтобы вырастить продукт без значительных ограничений в отношении реверсии.

Некоторые вещи, которые вы захотите рассмотреть.

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

Модульные тесты. Они дают возможность утверждать «это то, что ожидает клиентский код». При сборке вы можете запустить модульные тесты TFS .

2 голосов
/ 31 августа 2011

Патрик Smacchia из NDepend слава об этом ~ 3,5 года назад.

http://codebetter.com/patricksmacchia/2008/01/20/avoid-api-breaking-changes/

Он упоминает LibCheck и (очевидно) NDepend, а комментарий упоминает еще один.

Поскольку с тех пор прошло более 3,5 лет, в наши дни могут быть доступны лучшие варианты (LibCheck уже более 6 лет), но это должно быть началом.

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