Подтвердить что ты не робот

Кодовые контракты строят действия по сборке

Я использую кодовые контракты и пытаюсь понять, какие из вариантов сборки я буду использовать и когда. Варианты сборки сборки контракта определены в свойствах проекта

Кодовые контракты → Ссылка на контрактную документацию:

  • Нет
  • Построить
  • DoNotBuild

Любые мысли или рекомендации?

4b9b3361

Ответ 1

Да, параметры None и DoNotBuild кажутся немного странными.

Если вы выберите "Нет" и обратитесь к библиотеке в проекте с контрактами, вы получите предупреждение.
Если вы выберете DoNotBuild, вы не получите предупреждение.

И, конечно, только Build создает ссылку assy, ​​а для .EXE все это не имеет значения.

Ответ 2

Ссылка на контрактную ссылку - это особый вид сборки, который сохраняет любые кодовые контракты, определенные вами в файлах исходного кода. Это необходимо, потому что во время компиляции "перезаписывающий" код контрактов (ccrewriter) удаляет или заменяет каждый контракт эквивалентным кодом проверки (Contract.Requires(someBool) может быть переписан как if (!someBool) throw).

Без кодовых контрактов, если вы позже ссылаетесь на скомпилированную сборку (а не на проект и все файлы исходного кода) в другом решении, она может не знать ни одного из кодовых контрактов. Если бы была создана сборка контрактов, IDE могла бы принимать во внимание любые контракты в этой сборке во время статического анализа.

Что касается настроек, вот что они означают:

  • (none) означает, что вы не сделали выбор, и поэтому никакая ссылочная сборка не будет создана. Если другое устройство зависит от этого, и вы выбрали для него Build, вы можете получить сообщение об ошибке/предупреждение о том, что "никакая ссылка не была найдена."

  • Если вы измените настройку на Build, будет создана эталонная сборка, которая содержит все ваши контракты. Вы сможете использовать все кодовые контракты, определенные в этой сборке, как если бы у вас был исходный код. Выберите это, если вы создаете библиотеку, которая будет использоваться сторонней стороной (например, пакетом NuGet) или кем-либо после сборки сборки, чтобы они могли использовать ваши кодовые контракты в статическом анализе.

    /li >
  • Если вы измените настройку на DoNotBuild, никакая эталонная сборка не будет создана, сохранив ваши кодовые контракты. Выберите это, если вы не собираетесь использовать эту сборку где-либо еще, или если все остальные пользователи сборки будут иметь доступ к исходному коду и не нуждаются в эталонной сборке. Это может немного ускорить создание.