CodeContracts недоказан в ServiceBase - PullRequest
1 голос
/ 29 февраля 2012

У меня есть следующий код в автоматически сгенерированной части класса обслуживания Windows (производная от ServiceBase):

                private void InitializeComponent()
                {
                    components = new System.ComponentModel.Container();
problem line 32:    this.ServiceName = "QueueService";
                }

и Code Contracts позволяет, я вижу несколько предупреждений, которые, я сомневаюсь, верны:

Warning 5   CodeContracts: requires unproven: !value.Contains("/")  ...\QueueService.Designer.cs    32  4   ...
Warning 6   CodeContracts: requires unproven: !value.Contains("\\") ...\QueueService.Designer.cs    32  4   ...
Warning 7   CodeContracts: requires unproven: value.Length <= MaxNameLength ...\QueueService.Designer.cs    32  4   ...

В чем проблема с этим кодом и как исправить это предупреждение?

1 Ответ

2 голосов
/ 29 февраля 2012

Я полагаю, что проблема в том, что в настоящее время Code Contracts не «заглядывает внутрь» строк, даже если они являются константами времени компиляции, поэтому он ничего не знает о том, будет ли выполнен контракт.

Например, следующее выдаст предупреждение:

var test = "test";
Contract.Assert(!test.Contains("/")); // Warning here

Вы можете использовать Contract.Assume, чтобы отключить предупреждения.

Например:

var test = "test";
Contract.Assume(!test.Contains("/"));
Contract.Assert(!test.Contains("/")); // no warning
...