Убедитесь, что я не нарушил API публичного класса - PullRequest
3 голосов
/ 20 сентября 2011

Кто-нибудь знает хороший способ проверки того, что текущая кодовая база не меняет существующие публичные API?Я хотел бы выполнить это как часть непрерывного процесса интеграции.

Что-то вроде набора:

(объединение всех текущих сигнатур открытых методов и имен открытых типов) с пересечением (всепредыдущие подписи общедоступных методов и имена общедоступных типов)

  • должны быть равны (глубокое сравнение) всем предыдущим сигнатурам общедоступных методов и именам открытых типов

Возможно, какой-то проект использовал Mono.Cecilили NDepend и способен анализировать это из командной строки?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Я недавно написал в блоге сообщение о , как избежать изменения взлома API с помощью NDepend и его запросов к коду и возможностей правил. Отказ от ответственности: я один из разработчиков инструмента

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

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

API breaking changes

Вы также найдете соответствующие правила и запросы по умолчанию для кода:

1 голос
/ 25 сентября 2011

Есть corcompare, инструмент, который Mono использует внутри, чтобы сравнивать их API с реализацией Microsoft .Net.Если вы хотите сгенерировать отчет в формате HTML, как это делает Mono, corcompare доступно на github (может быть встроено в Visual Studio).Есть также хороший интерфейс GUI под названием gui-compare , который использует тот же бэкэнд Cecil (для пользовательского интерфейса требуется установленный gtk-sharp).Я использовал его раньше, и это было очень удобно - просто наведите его на две разные библиотеки DLL, и появится хорошее окно сравнения.Corcompare, с другой стороны, генерирует XML-дескрипторы API, если вы хотите автоматизировать эту проверку.

Эти инструменты проверяют дескрипторы методов (включая имена параметров, поскольку вы можете связывать параметры по имени в C # 4), видимость иатрибуты (на уровне сборки, класса, метода и параметра).

...