2012-06-19 92 views
7

我想在编译时使用契约为我的类型添加验证,但不幸的是它不起作用。例如下面的代码在编译项目时不会导致编译器错误。我应该启用什么吗?Contract.Assert不会抛出编译错误

Contract.Assert(false, "Invalid state!"); 

回答

7

是的,您需要启用静态检查。进入项目属性并访问“代码合同”选项卡。当然,您需要首先安装静态检查器扩展,该IIRC仅适用于Visual Studio Ultimate。有关确切选项的详细信息,请参阅user documentation

请注意,在初始编译阶段后出现,所以有时会在构建的第一部分和静态检查器的结果之间看到延迟。 (这不是一个真正的“编译器”错误 - 这是一个“合同检查”错误。)

+2

A [Code Contracts](http://research.microsoft.com/en-us/projects/contracts/)包中包含合同的静态检查器('cccheck.exe'),几乎可以与除了Express之外的任何版本的VS配合使用。如果你有Ultimate版本,那么很好,如果你不这样做 - 不用担心,那么Contract就可以和Professional一起工作了。 :) –

+0

用户文档不再存在乔恩。项目被转移到github上。请更新您的链接 –

+1

@JohnDemetriou:已更新,但将来如果您已经知道新链接,最好只编辑更新链接的答案。 –