Строительство с кодовыми контрактами?

У меня есть следующий метод:

private void DoSomething(CoolClass coolClass)
{
    if (coolClass == null)
    {
        throw new ArgumentNullException("coolClass");
    }
    coolClass.Name = "Pepe";
}

С кодовыми контрактами мы можем написать это следующим образом:

private void DoSomething(CoolClass coolClass)
{
    Contract.Requires<ArgumentNullException>(coolClass != null, "IS NULLL!");
    coolClass.Name = "Pepe";
}

Второй метод короче и проще. Проблема в том, что когда вы ее создаете, во время выполнения она не генерирует исключение, она показывает это:

Описание: сборка (возможно, "CodeContractsTest" ) должна быть перезаписана с использованием двоичного перезаписывающего кода кода (CCRewrite), поскольку он вызывает Contract.Requires и символ CONTRACTS_FULL. Удалите все явные определения символа CONTRACTS_FULL из вашего проекта и перестройте. CCRewrite можно загрузить из http://go.microsoft.com/fwlink/?LinkID=169180. После установки перезаписывающего устройства его можно включить в Visual Studio на странице "Свойства проекта" на панели "Контракты кода". Убедитесь, что включена опция "Выполнять проверку выполнения времени выполнения", которая будет определять CONTRACTS_FULL.

Если с VS вы не загрузите CodeContracts для .net из здесь.

И затем вы проверяете "Проверка времени выполнения" в проекте, чтобы при его создании во время выполнения исключалось исключение.

Наше приложение построено с помощью Jenkins с помощью сценариев PowerShell. Есть ли способ проверить время выполнения и выбросить исключение с помощью простой команды или атрибута или что-то простое?

Ответ 1

Почему бы вам просто не написать свою версию метода, если вам нравится простота?

public class CustomContract
{
    public static void Requires<TException>( bool Predicate, string Message )
        where TException : Exception, new()
    {
       if ( !Predicate )
       {
          Debug.WriteLine( Message );
          throw new TException();
       }
    }
}  

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

Ответ 2

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

Щелкните правой кнопкой мыши по проекту → Свойства → Код контракта (вкладка) измените режим сборки на "Стандартные требования к контракту" также установите флажок - Выполните проверку контракта Runtime