代码合同和编译

| 过多使用代码契约会减慢编译过程。 其次,代码契约只是调试模式的一部分,如果我设置代码契约并始终在发布模式下编译代码,那代码契约将起作用吗?我想不会,这意味着开发人员将被迫在调试模式下工作,并且在创建设置时将其设置为发布模式。我对吗?     
已邀请:
        假设来自MS Devlab的代码合同, 编译:合同工具在编译后激活。有一个用于运行时检查的重写器,它花费(一点)时间作为构建的一部分。 静态验证程序在此之后运行,但在后台运行。您不必等待,除非您想立即查看消息。 运行时行为。这是可以配置的多个步骤,从完全关闭(基准),仅需要/要求+确保(发布)到完全(分析/调试)。     
        由于CodeContracts的工作方式,编译速度有所降低。有一个IL重新编写器,可根据您指定的合同将代码注入您的方法中。这是在C#编译器出现并为程序集生成IL之后发生的。 运行时性能差异很小,不会以明显的方式影响您的代码。除非您正在开发一些实时股票交易系统,否则我什至不会担心。 至于在生产中禁用代码合同,我宁愿对代码合同进行额外的保护,以免某些错误可能会掩盖。代码合同中的错误将告诉您违反合同的确切位置和原因,而不是仅仅因为在调用栈树的5个级别中传递了一些不良数据而不得不深入某个深度调用栈。 如果您正在使用或计划使用ѭ0,并且未启用“运行时合同检查”,则会遇到有关IL重写器需要绑定到代码合同的使用的运行时故障。然后,您将需要启用“运行时合同检查”才能使其正常工作。 恕我直言,使用
Contract.Requires<TException>()
Contract.Requires()
有用得多,因为您可以控制引发的异常类型。 编辑:我忘记添加的一件事是IL Rewriter完全独立于C#编译器,并且两者之间没有依赖关系。     

要回复问题请先登录注册