Проблема CodeContracts

Здравствуйте, у меня есть небольшая проблема, касающаяся CodeContracts. У меня есть проект библиотеки классов, который как класс с методом foo(строка s1, строка s2); внутри метода foo у меня есть Contract.Requires(s1!= null). Поэтому, если я понимаю значение моего кода (да, я только что установил CodeContracts и поигрался с:), контракт проверит выражение s1! = Null во время процесса сборки и во время выполнения, выбрасывая ArgumentException>. Я хотел проверить поведение, когда я вызываю foo(null, "test") из проекта lib класса, дизайнер рассказывает мне о проблеме, но когда я вызываю ее из проекта приложения winform, я не получаю никаких предупреждений в окно списка ошибок. Значит ли это, что контракты кода работают только в том проекте, в котором они находятся, а не снаружи? Спасибо

ОБНОВИТЬ


Я забыл упомянуть, что предварительные условия, которые я добавил, не работают в статическом анализе. Однако они генерируют ArgumentException с соответствующим сообщением во время выполнения.

3 ответа

Решение

Хорошо, ребята, благодаря команде MS, я нашел проблему. Причиной такого странного поведения было то, что имя моей сборки оканчивалось на ".Contracts.dll". И проблема в том, что статический анализатор не проверяет сборки, имена которых на этом заканчиваются. Я переименовал сборку, и все работает как шарм, как и любой другой продукт MS:)

Это должно работать, если у вас есть Perform Static Contract Checking проверил в вашем проекте winforms. Также убедитесь, что Perform Runtime Contract Checking проверяется в вашем проекте библиотеки классов, если вы хотите проверить во время выполнения.

Кроме того, в вашем проекте библиотеки классов, Contract Reference Assembly должен быть установлен в Build,

Из документации Кодекс контрактов:

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

Эта сборка ссылок на контракты имеет решающее значение, чтобы сделать контракты в вашем проекте доступными для ссылок на проекты. Без построения ссылочной сборки контракта другие проекты не могут определить, какие контракты присутствуют.

Вы не написали, какую версию Visual Studio вы используете. AFAIK Code Cotnract Static Analysis работает только с VS Premium (то есть Standard и Professional недостаточно).

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