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