2013-02-13 2 views
0

Ниже приведен пример, который я создал для того, чтобы получить инструмент статического анализа на провал:Статический анализ не работает на простейших примера

using System.Diagnostics.Contracts; 
using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      object x = null; 
      Contract.Assert(x != null); 
     } 
    } 
} 

анализа выполнения бросков правильного исключения, но статический анализ строит без даже предупреждение. У меня есть каждый флажок, выбранный в настройках проекта, и уровень предупреждения на «привет». Я запускаю версию 1.4.51019.0.

Что мне нужно сделать, чтобы компиляция завершилась неудачей?

ответ

3

«Каждый выбранный флажок» является проблемой здесь. Вам необходимо снять флажок «Infer Ensures».

Что здесь происходит следующее:
код, который вы создали никогда не может быть правильно, вы инициализировать x с null и непосредственно после этого вы утверждаете, что x должно быть не null.
Из-за этого противоречия в Кодексах Контрактов указывается Contract.Ensures(false), который всегда будет терпеть неудачу.
Я предполагаю, что выведенный Contract.Ensures(false) в начале метода заставит статический анализатор пропустить оставшуюся часть метода.

Вывод Contract.Ensures(false) кажется ошибкой кодовых контрактов для меня, но единственный способ отключить его - полностью отключить вывод.

+0

Спасибо, это сделал трюк (нужно подождать, чтобы принять ответ) – AlexFoxGill

+0

Должен ли я также снять галочку с других полей «Infers»? – AlexFoxGill

+0

@AlexG: Я оставляю только «Инференты Infer для чтения только», проверенные в моих проектах. –

Смежные вопросы