在我們的項目中,我們定義了兩個三種構建配置,Release,Debug和'Debug-plus-contracts'。這些被定義爲如下:合同會發生什麼?需要在沒有代碼合同的情況下安裝嗎?
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<DefineConstants>TRACE;DEBUG</DefineConstants>
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug-plus-contracts'">
<DefineConstants>TRACE;DEBUG;CONTRACTS_FULL</DefineConstants>
<CodeContractsEnableRuntimeChecking>True</CodeContractsEnableRuntimeChecking>
<CodeContractsRuntimeThrowOnFailure>False</CodeContractsRuntimeThrowOnFailure>
...
我們定義兩個調試配置,因爲「調試加合同」只有建立在安裝
與 Code Contracts for .NET機我的問題是,會發生什麼變化的線路,如Contract.Requires(source.Any())
時它是在每個配置中編譯的?假設它在運行時被違反,哪些配置會發生什麼?
我問,因爲我聽說(的地方),在調試配置,Contract.Requires
被編譯成Debug.Assert
。但有證據表明這不是真的,我們有一些Contract.Requires
在Debug-plus中失敗,但在Debug中失敗。
(+1)請注意,此答案中的「您沒有安裝代碼合同」是指BUILD機器。您當然不需要在客戶機器上安裝代碼合同。另外請注意,通常您應該選擇「標準合同要求」的組裝模式,而不是「自定義參數驗證」(不幸的是,這似乎是默認設置)。 –
@MthetheWWatson你完全正確,我已經編輯了我的答案,希望稍微清楚一點。 – hvd