Готовые кодовые контракты в .NET 4.0 - PullRequest
4 голосов
/ 10 августа 2011

Я бы очень хотел опробовать новый Контракт кода в Visual Studio 2010, но я не хочу устанавливать дополнительные расширения для Visual Studio (так как мой код предоставлен моим коллегам).Теперь при настройке таргетинга на .NET 4.0 я могу использовать новое пространство имен System.Diagnostics.Contracts, но пока не заставляю его что-либо делать.

Например, используя

static void Main(string[] args)
{
    Greet(null);
    Console.ReadLine();
}

private static void Greet(string name)
{
    Contract.Requires(name != null);
    Console.Out.WriteLine("Hello {0}", name);
}

Программа компилируется и запускается (отображается «Hello») без каких-либо предупреждений.Если я пытаюсь использовать Contract.Requires<ArgumentNullException>(name != null), я получаю сообщение о том, что я должен использовать перезаписывающее устройство независимо от значения имени.Google говорит мне, что я могу получить любое волшебство, когда я устанавливаю Code Contracts Premium, но какова цель этого пространства имен, когда я этого не делаю?Могу ли я использовать кодовые контракты для чего-то другого, кроме сложных комментариев из коробки?

Ответы [ 2 ]

6 голосов
/ 10 августа 2011

Что ж, если вы определите символ препроцессора CONTRACTS_FULL, то различные методы Contract.* завершатся неудачно из-за того, что перезаписывающее устройство не запущено (согласно комментариям). Если вы не определите символ препроцессора, они будут игнорироваться во время компиляции.

Смысл включения минимальных классов Code Contracts в платформу заключается в том, чтобы не требовалось устанавливать дополнительное программное обеспечение при развертывании кода, но вам do необходимо установить дополнительные инструменты для постобработки во время сборки.

2 голосов
/ 10 августа 2011

Полагаю, ответ заключается в ваших возражениях против установки расширений.Наличие контрактов «из коробки» означает, что вы можете использовать все контракты, которые вы хотите, чтобы ваши коллеги могли компилировать код без каких-либо установленных расширений.продление и получение реальных выгод от контрактов без наложения каких-либо новых требований на ваших коллег

...