Как установить и использовать кодовые контракты? - программирование

Как установить и использовать кодовые контракты?

У меня есть основной вопрос, может быть, это так очевидно, но по какой-то причине я не могу показаться успешным при установке и использовании кодовых контрактов.

Я загрузил пакет из MSDN, установил его после онлайн-документации, но я все еще получаю предупреждение IDE для приведенного ниже кода:

Contract.Requires(inputParameter != "");

предупреждение IDE:

"Вызов метода пропускается. Компилятор не будет генерировать вызов метода, потому что метод является условным, или это частичный метод без реализации"

Все, что мне не хватает в процессе создания кодовых контрактов? Я использую VS2010 Ultimate SP1

4b9b3361

Ответ 1

Скорее всего, это связано с тем, что Контрактные коды не настроены в настройках проекта. Если вы перейдете к своим свойствам проекта, вы увидите вкладку "Кодовые контракты". На вкладке выберите режим, в котором вы строите (Debug | Release | Both), а затем включите функции Code Contracts, установив соответствующие флажки.

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

Если вы не видите вкладку "Контракты кода", вам может потребоваться установить Кодовые контракты на вашем компьютере. Сделайте это, загрузив и установив установщик из здесь.

Ответ 2

Условная компиляция основана на определениях препроцессора компилятора. Это тот же подход, который используется для константы DEBUG, хотя Visual Studio скрывает определение того, что находится за флажком. Это эффективный подход, поскольку, когда эти символы не определены, методы вообще не вызываются; важно, чтобы передаваемые параметры также не оценивались, поэтому вы можете использовать относительно дорогие проверки в ваших контрактах с кодом, не беспокоясь о том, что эти проверки замедляют выпуск сборок.

Введение Microsoft в кодовые контракты говорит следующее:

Большинство методов в классе контракта условно скомпилированы; то есть компилятор выдает вызовы этим методам только тогда, когда вы определяете специальный символ CONTRACTS_FULL, используя директиву #define. CONTRACTS_FULL позволяет писать контракты в коде без использования директив #ifdef; вы можете создавать различные сборки, некоторые с контрактами, а некоторые без них.

Хотя это говорит об использовании #define в коде для включения кодовых контрактов:

#define CONTRACTS_FULL

как @NirMH сказал в комментариях, как правило, лучше определить его в условных символах компиляции для проекта, чтобы вы могли использовать его для некоторых сборок и отключать для других.

Условные настройки компиляции

Обратите внимание, что CONTRACTS_FULL - единственный вариант, который у вас есть, хотя он явно назван так, чтобы в будущем возможность более детального контроля.