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

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

Я разрабатывал сторонний проект, используя кодовые контракты Microsoft для статической проверки типов (отчасти потому, что раньше я их не использовал и очень хотел учиться).

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

Я использую .Net 4.5, поэтому библиотеки Code Contract включены, но мне интересно, будет ли Visual Studio жаловаться, что они не собираются сCONTRACTS_FULL указывается в опциях сборки каждый раз, когда они идут на сборку или, если я уйдуCONTRACTS_FULL в опциях сборки, что произойдет, когда другой разработчик попытается собрать? Кроме того, мне интересно, как будет действовать конечный продукт в случае сбоя контракта, но код не был создан с помощью переписчика кодовых контрактов.

Я создал новое решение только с одним проектом. Создана простая функция, которая запускает нарушение контракта кода, с удаленными контрактами кода иCONTRACTS_FULL не указан. Построил и запустил его и получил следующую ошибку:

Run-time exception (line 8): An assembly (probably "hdxticim") must be rewritten using the code contracts binary rewriter (CCRewrite) because it is calling Contract.Requires<TException> and the CONTRACTS_FULL symbol is defined.  Remove any explicit definitions of the CONTRACTS_FULL symbol from your project and rebuild.  CCRewrite can be downloaded from http://go.microsoft.com/fwlink/?LinkID=169180. 
After the rewriter is installed, it can be enabled in Visual Studio from the project's Properties page on the Code Contracts pane.  Ensure that "Perform Runtime Contract Checking" is enabled, which will define CONTRACTS_FULL

Я думаю, что сообщение об ошибке необходимо переписать, так как CONTRACTS_FULL наиболее точно не указан.

Благодаря Matías Fidemraizer, мы решили, что это происходит при использованииContract.Requires<TException>() а не наContract.Requires().

В идеале я хотел бы изменить это поведение так, чтобы Контракт запускал предоставленное исключение, как если бы это было обычное охранное заявление, вместо того, чтобы жаловаться на переписывающего.

Вот скрипка демонстрируя проблему:https://dotnetfiddle.net/cxrAPe

Ответы на вопрос(3)

Ваш ответ на вопрос