Проблема CodeContracts - PullRequest
       23

Проблема CodeContracts

4 голосов
/ 27 ноября 2010

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

UPDATE


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

Ответы [ 3 ]

6 голосов
/ 01 декабря 2010

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

2 голосов
/ 27 ноября 2010

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

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

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

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

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

0 голосов
/ 29 ноября 2010

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

...