我从原始网站安装了代码合同,并试图编写一些示例代码。但R#只是写了Method invocation is skipped
。当我观察反编译源时,我发现该方法是有条件的:必须定义CONTRACTS_FULL
常量。我在项目设置中检查了Code Contracts
选项卡中的所有内容,但似乎不起作用。如何正确使用代码合同?
4
A
回答
4
的user documentation(PDF)这样说:
2合同
大多数的合同类的方法是条件编译,意味着编译器只发出这些方法的调用,当一个特殊符号,全 - 合同符号,被定义。那个符号是
CONTRACTS_FULL
。这允许在不使用#ifdef的情况下在代码中编写合同,但是产品的版本不同,有些使用合同,有些则不使用。如果您正在使用Visual Studio 2008或更高版本(第6章)或的MSBuild(A.1节),那么你就需要自己定义这个符号。相反,当您使用提供的UI启用运行时或静态检查(或项目中的属性或msbuild参数中定义的/ p)时,构建会自动定义此符号并执行适当的重写操作。如果您使用自己的构建机制,则需要定义完整合约符号,如果您希望将合约发射到您的装配中供工具进一步使用。
所以代码合同方法是有条件编译的,基于CONTRACTS_FULL
的存在。
如果检查Perform runtime contract checking
或Perform static contract checking
然后Visual Studio将确保CONTRACTS_FULL
定义,但作为传递到构建过程,而不是在项目定义的常量的参数。因此,检查这些框是您打开合同检查所需的全部内容。 (另一种方法是选中这些复选框,以便在项目中定义CONTRACTS_FULL
常量,但在保持文本字段及其两个复选框同步时会出现问题。)
因此,就其他任何其他工具(包括Resharper)而言,Contract
中的方法以未定义的常量为条件。您可以忽略警告或手动定义常量。
-1
“条件常数”(更恰当:“条件编译符号”)设置(或定义)项目属性的生成选项卡。
在“条件编译符号”文本字段中只需输入“CONTRACTS_FULL
”和你所有的设置。
相关问题
- 1. 如何正确组合ARC代码与非ARC代码?
- 2. 如何完全禁用代码合同?
- 3. 如何确定使用相同宏的不同C++代码库?
- 4. 如何正确缩进PHP/HTML混合代码?
- 5. 使用正确的代码与setlocale
- 6. 在保持代码正确性的同时使用iconv
- 7. 在代码合同中使用Contract.ForAll
- 8. 使用强制代码合同sn.exe 4.0
- 9. 如何正确格式化此代码?
- 10. 如何正确传输Javascript代码?
- 11. 如何正确调试OCaml代码?
- 12. 如何正确构造nodejs代码
- 13. 如何正确反汇编.NET代码?
- 14. 此代码如何正确工作?
- 15. 如何正确重构代码:
- 16. 如何管理正确的代码
- 17. 如何正确同时执行多个f90代码?
- 18. 如何隐藏使用PHP的正确方式的空代码?
- 19. 如何正确使用我的代码中的notifyDataSetChanged?
- 20. 如何在JS代码中正确使用gettext?
- 21. Django开发 - 如何正确布局和使用代码
- 22. 如何正确使用joomla文章中的代码?
- 23. 如何使用“undefined”常量验证代码正确性引理
- 24. 如何使用正确编码的db_dump
- 25. 如何正确的使用合并响应映射在AWS API网关返回不同的HTTP代码
- 26. 如何在查询中使用代码合同?
- 27. 如何使用代码合同进行单元测试
- 28. 如何在C++/CLI项目中使用代码合同?
- 29. 你如何确保代码被正确地重用?
- 30. 这段代码如何工作?什么是正确的代码
到目前为止,我确定'Perform Runtime Checking'选项定义了这个常量... –