我在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 ...
此代码有什么问题,以及如何修复此警告?
答案 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