请阅读代码合同手册。它会告诉您您需要知道的一切。你不需要任何ConditionalAttribute
在您的方法上定义。您可以使用Contract.Requires<TException>(bool condition)
如果您知道这样做的要求是什么。
正如 @Mixiphoid 在他们的回答中所说,因为他们使用的是 Requires 的通用形式,所以需要在构建服务器上安装代码契约and 执行运行时契约检查需要为Release配置启用此外调试配置。
如果您使用代码合同,那么您将always需要在构建调试版本的构建服务器上安装代码合约。您的团队也是如此:所有需要编译代码的开发人员都需要安装代码合约以进行调试构建。
一切都在第 5 节:使用指南在代码合同手册中。有一个有用的图表page 20这很好地总结了各种使用场景及其要求。
About Contract.Requires<TException>(bool condition)
首先,为代码合约编写此方法的开发人员did not忘记应用ConditionalAttribute
正如已接受的答案所述,该方法。离得很远。该方法没有用该属性修饰的事实是按设计.
如果你读过第 5 节:使用指南,你会发现如果你使用这种形式Requires
方法,那么你需要使用二进制重写器——ccrewrite
- 构建装配体时。这意味着任何构建装配体的机器都必须具有ccrewrite
可用的。
那么,如何构建您可能无法控制的服务器呢?我很高兴你问了。
TFS 托管构建服务器
关于 TFS 托管的构建服务器:确实,您不能简单地在构建服务器上安装代码契约。那么你有什么选择呢?
- You could limit yourself to using only the "legacy" form of code contracts, if-then-throw blocks followed by
Contract.EndContractBlock()
or limit yourself to only using Contract.Requires(bool condition)
(the non-generic form), or a mixture of the two.
- 无论哪种情况,您可能都希望为 TFS 托管的构建服务器提供单独的调试构建配置。这个构建配置将有执行运行时契约检查对该构建配置禁用。
- 你可以做一点“bing-ing”或“google”并想出this http://blog.mycupof.net/2013/03/30/team-foundation-service-make-codecontracts-work-on-a-hosted-build-agent/搜索结果,描述如何在 TFS Online 上使用代码合同构建解决方案。
上面链接的博客文章包含修改 TFS 托管构建控制器托管构建的说明。
更新:很快就会有 NUGET 版本的代码合约对于那些使用托管构建服务(例如 Visual Studio Online、AppVeyor 等)的人来说,新的社区驱动的代码合同 GitHub 存储库最近发布了v1.10.xxxxx.RC1。在发行说明中,他们提到了代码合约的 NuGet 版本 https://github.com/Microsoft/CodeContracts/issues/13. Enjoy.