CodeContracts在ServiceBase中未经验证

时间:2012-02-29 08:33:29

标签: .net windows-services code-contracts

我在Windows服务类的自动生成部分(ServiceBase派生)中有以下代码:

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

和代码合同启用,我看到几个警告,我怀疑是正确的:

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 个答案:

答案 0 :(得分:2)

我认为问题是当前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