我最近使用代码合同(code contracts)替代了很多手动先决条件测试和异常抛出。我使用了
Microsoft.Contracts.dll
程序集,这样我就可以继续使用.NET 3.5更长一些时间(该库既可用于.NET 3.5,也可用于.NET 4程序集)。我在Visual Studio 2010中设置了代码合同重写器,并且代码合同运行良好。
然而,自从我做了这个转换后,我注意到调试器在具有代码合同的方法中表现出奇怪的行为,特别是在具有ContractInvariantMethod的类中。执行光标似乎并不总是与突出显示的行匹配,某些断点无法被触发,我曾经遇到一个方法,调试器无法识别局部变量名称,会显示像CS$1$0000
之类的东西。这是在调试版本中。
在.NET 3.5通过VS10使用Microsoft.Contracts.dll
中的代码合同存在已知问题吗?在.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