我最近使用代码契约迁移了很多手动前提条件测试和异常抛出。我没有升级到 .NET 4,而是使用Microsoft.Contracts.dll
程序集,这样我就可以坚持使用 .NET 3.5 更长的时间(这是一个由 .NET 3.5 和 .NET 4 程序集使用的库)。我已经在 Visual Studio 2010 中设置了合同重写器,合同工作得很好。
然而,自从我完成了该切换后,我注意到调试器在具有契约的方法中表现得很有趣,尤其是在具有 ContractInvariantMethod 的类中。执行光标似乎并不总是与突出显示的行匹配,某些断点无法被命中,并且我有一种方法,其中调试器无法告诉本地变量名称并会显示类似的内容CS$1$0000
。这是在调试版本中。
使用代码合约是否存在已知问题Microsoft.Contracts.dll
在 .NET 3.5 到 VS10 中?
.NET 4 中的代码契约是否会出现类似的问题?
[编辑] 这个问题导致我在 Microsoft Connect 上创建了一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/573983/code-contract-rewriting-messes-up-local-variable-names-in-iterator-methods-while-debugging
我希望你知道合约重写意味着什么——动态生成的额外代码,没有任何源代码可供编译器锁定。由于 CLR 具有如此多不同的元素,因此调试器要么根本不会做很多事情,要么会感到困惑,只有具有广泛影响的完整语言功能的事情才能获得完整调试器支持的预算。例如 lambda 表达式。
这并不是说提交错误没有好的理由,只是当您使用尚未完全开发的方面时,您不应该期望任何事情都会变得更好。成为早期采用者总是要付出这样的代价,但也有吹牛的权利:-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)