那么C#4.0代码合同实际上做了什么吗?

Geo*_*uer 15 .net c# code-contracts c#-4.0

在阅读System.Diagnostics.Contracts.Contract了受Spec#令人敬畏的影响的静态类之后,我很激动,并立即开始通过调用Contract.Requires()和编写代码Contract.Ensures().

我想这只是因为我的代码是如此超级棒和无错误,检查那些调用实际做了什么直到最近才出现.一个错误滑过,我意识到这些电话没有做任何事情!我原以为他们至少会在违反条件时抛出异常,但没有这样的运气.

我错过了什么吗?有谁知道这是什么意思?

JSB*_*ոգչ 17

MSDN的合同类页面:

您必须使用二进制重写器来插入合同的运行时强制执行.否则,Contract.Ensures方法之类的合同只能进行静态测试,并且如果违反合同,则不会在运行时抛出异常.您可以从MSDN DevLabs网站上的Code Contracts下载二进制重写器CCRewrite.CCRewrite附带一个Visual Studio加载项,使您可以从项目"属性"页面激活运行时合同实施.二进制重写器和Visual Studio加载项不随Visual Studio 2010或Windows SDK一起提供.