Таким образом, контракты на код С# 4.0 на самом деле ничего не делают?
После прочтения статического класса System.Diagnostics.Contracts.Contract
, на который повлияла удивительность SpeС#, я был взволнован и сразу же начал начинали мой код вызовами Contract.Requires()
и Contract.Ensures()
.
Я предполагаю, что это просто потому, что мой код настолько супер-потрясающий и без ошибок, что проверка того, что эти вызовы действительно делали что-то, просто не появлялось до недавнего времени. Ошибка проскользнула, и я понял, что эти призывы ничего не делают! Я бы подумал, что они, по крайней мере, вызывают исключение, когда условие нарушается, но нет такой удачи.
Я что-то упустил? Кто-нибудь знает, что это за точка?
Ответы
Ответ 1
От страница класса договора на MSDN:
Вы должны использовать бинарный перезаписывающий вставить временное контракты. В противном случае такие контракты поскольку метод Contract.Ensures может тестироваться только статически и не будет исключить исключения во время выполнения, если контракт нарушен. Вы можете скачать бинарный перезаписывающий CCRewrite из Кодовые контракты на веб-сайте MSDN DevLabs сайт. CCRewrite поставляется с визуальным Studio, которая позволяет вам активировать принуждение к исполнению во время выполнения на странице свойств проекта. бинарный перезаписывающий и Visual Studio надстройка не поставляется с Visual Studio 2010 или Windows SDK.
Ответ 2
Расширение ответа JSBangs:
Здесь вы должны проверить флажок "Выполнить проверку выполнения времени выполнения":
![enter image description here]()
(Я также проверил флажок "Статическая проверкa > Проверка статического контракта" )
Ответ 3
Если вы хотите, чтобы вызов .Requires
вызывал ошибку, вам нужно установить параметр в настройках проекта или использовать .Requires<T>
call