Поддержка контрактов кода в Visual Studio Express 2013

Я разрабатывал проект на С# в Visual Studio Express 2013 и натолкнулся на контракты кода для языков .NET. Под впечатлением их краткости и инструмента статического анализа, который был в их распоряжении, я начал использовать их в своей базе кода. Однако, когда я попытался запустить свою программу, меня встретило сообщение об ошибке, похожее на то, что было найдено в этой SO-теме, т.е.

... Сборка (вероятно, "& lt; мой проект & gt;") должна быть переписан с использованием кода контракта двоичного переписателя (CCRewrite), потому что он вызывает Contract.Requires и символ CONTRACTS_FULL определены. Удалите все явные определения символа CONTRACTS_FULL из вашего проекта и перестроить...

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

В некоторых ветках форума MSDN, похоже, указано, что все инструменты для Code Contracts включены в версию Express, а страница свойств Code Contracts - нет. Похоже, что так оно и было, поскольку я смог запустить свой проект в VSE 2013 только после включения Code Contracts с копией Visual Studio 2012 Ultimate, которую я приобрел в своем университете до выпуска.

Неужели нет никакого способа работать с контрактами кода в Visual Studio Express, кроме как путем изменения файлов проекта вручную или с помощью платной версии Visual Studio? Если это так, я крайне неохотно их использую, поскольку моя компания вряд ли приобретет лицензии VS. Кроме того, кажется крайне странным, что Microsoft попытается распространить эту новую и более совершенную парадигму проверки, но затем ограничит ее только платными клиентами.

Ответ 1

Возможно, вы сможете использовать новую VS Community 2013, если вы соответствуете требованиям лицензирования: http://www.visualstudio.com/en-us/visual-studio-community-vs

Вот как сообщество Visual Studio можно использовать в организациях:

неограниченное количество пользователей в организации могут использовать Visual Studio Сообщество по следующим сценариям: в классе обучения окружающая среда, для академических исследований или для содействия с открытым исходным кодом проекты.

Для всех других сценариев использования: не для предприятий организации, до 5 пользователей могут использовать сообщество Visual Studio. В организации предприятия (то есть организации с> 250 ПК или> 1 млн. долл. США) Доллары США в годовом доходе), кроме открытого использования запрещено источник, академические исследования и учебная среда сценарии, описанные выше.

Это в основном VS 2013 Professional бесплатно, так что вы можете установить расширение кода контрактов.

Ответ 2

Проблема в вашей редакции Visual Studio. Вы используете Visual Studio 2013 Express Edition, как вы заявили. Чтобы использовать бинарный перезаписчик из Visual Studio, вам необходимо установить расширения Code Contracts. Их можно загрузить с сайта Microsoft Research in Software Engineering (RiSE), который упакован как установщик Windows.

Установщик устанавливает необходимый бинарный перезаписывающий модуль, а также набор расширений Visual Studio. К сожалению, в своих руководствах на странице 40 Code Contracts заявляют, что они не поддерживают различные выпуски Visual Studio Express. Вам потребуется, по крайней мере, выпуск Visual Studio 2013 Professional, чтобы использовать расширение бинарного переписывания Code Contracts из Visual Studio и чтобы увидеть вкладку Code Contracts в окне свойств проекта.

Code Contracts выполняет перезапись сборки как шаг после сборки. То есть Visual Studio сначала компилирует код .NET, как обычно. Но при использовании Code Contracts и включении правильных опций в вашем проекте (при условии, что расширения VS установлены &— этого нельзя делать в выпусках Express), тогда Visual Studio после обычной компиляции вызывает для вас бинарный перезаписывающий модуль процесс.

Вместо этого, после компиляции вашей программы вам нужно будет вручную запустить программу ccrewrite, установленную Code Contracts на скомпилированной сборке (и всех зависимых сборках), чтобы "переписать" ваши сборки, что добавит во все Code Code. проверка информации. См. документацию Code Contracts (также доступна на веб-сайте RiSE) для получения информации о том, как это сделать.

Ответ 3

Предполагается, что контракты бесполезны для Visual Studio Express 2013 (по крайней мере, контракты с кодом поставляются с плагином для всех неэкспресс-версий).

Поэтому необходимо определить символ CONTRACTS_FULL в свойствах проекта → build → general → условные символы компиляции.

А затем добавьте соответствующий вызов ccrewrite.exe в командную строку события после сборки, которая находится в свойствах проекта → события сборки. Команда должна быть установлена на что-то вроде

"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe" -throwOnFailure "$(TargetPath)"

Я успешно использовал это сегодня вечером с NUnit. Используя контракты, мои модульные тесты не должны явно проверять условия публикации.