Использование codeContracts в.net 4.0 без влияния на других разработчиков

Я новичок в codeContracts, мне это нравится, потому что он кажется чистым.

Мне не нравится тот факт, что мне нужно скачать библиотеку, чтобы она работала. Никогда не понимал, почему Microsoft не сделала ее частью платформы в целом.

Я не хочу навязывать другим коллегам в команде, чтобы загрузить это.

Вопросы:

Могу ли я скачать расширения и добавить dll в сборку, чтобы, если они получают последнюю версию или работают над ней, им нечего было делать?

Что-нибудь нужно знать, прежде чем развертывать приложение с Codecontracts внутри?

Спасибо

2 ответа

Решение

В.NET 4.0 вам не нужно загружать или добавлять какие-либо библиотеки в проект, чтобы иметь возможность добавлять контракты кода в ваш код. Часть, которую вы загружаете, это инструменты для статического анализа и ccrewrite. Если вы используете более старую версию.NET, я советую вам обновить ее до 4.0, прежде чем начинать использовать контракты кода.

Пока вы используете только функции статического анализа (Static Contract Checking), вы можете использовать его без непосредственного вмешательства в процесс разработки других разработчиков (продолжайте читать, хотя). В этом случае ничего не меняется с точки зрения компиляции или развертывания.

Если вы хотели включить проверку выполнения контракта во время выполнения, то вам следует привлечь всех членов команды к использованию инструментов. Вы также должны убедиться, что ваш сервер сборки может выдавать те же результаты, что и ваша локальная Visual Studio. Это связано с тем, что как только вы включаете эту функцию, контракты кода начинают влиять на поведение во время выполнения. Очевидно, что поведение кода должно быть одинаковым для всех.

Даже если вы решите использовать только статические функции на данный момент, есть недостаток в том, что не все в команде используют инструменты: они не смогут должным образом поддерживать код, который использует контракты кода. Рефакторинг может потребовать внесения изменений в контракты, но без инструментов они могут непреднамеренно ввести множество предупреждений, которые вам придется исправить, если вы единственный, кто использует инструменты.

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

Я уже несколько лет использую Code Contracts в большой команде разработчиков с ограниченным доступом к базе кода.

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

Если вы используете его более чем в одном проекте, я бы также порекомендовал поместить вашу стандартизированную конфигурацию в файл целей, чтобы поделиться им между ними (делая вкладку конфигурации немного избыточной).

Если вы решите использовать статический анализ, я бы отключил его для ваших обычных конфигураций (например, Debug and Release), иначе вы потенциально замедлите сборки для других (этот первый запуск может занять много времени). У меня есть конфигурация, специально предназначенная для проведения статического анализа, поэтому я могу легко переключаться между ними, когда требуются результаты статического анализа.

Кстати, наш код представляет собой смесь.Net 2 и 4, которая не была проблемой, которую вы просто должны помнить, чтобы ссылаться на сборку Microsoft.Contracts для 2.

Другие вопросы по тегам