2012-02-29 45 views
1
未經證實

我有如下的窗口服務類的自動生成的部分代碼(ServiceBase派生):CodeContracts在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

是否編譯沒有這條線? – Christian 2012-02-29 08:41:38

回答

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 
相關問題