Контракты кода для .NET 3.5 портят отладчик VS10 - PullRequest
7 голосов
/ 07 июля 2010

Я недавно перенес много ручного тестирования предварительных условий и выдачи исключений с контрактами кода.Вместо обновления до .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

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Надеюсь, вы знаете, что означает переписывание контрактов - дополнительный код, сгенерированный на лету, который не имеет исходного кода для компиляции. Поскольку CLR имеет так много разных элементов, существует целый ряд вещей, которые отладчик либо не будет делать вообще, либо запутаются, и только те вещи, которые представляют собой полноценные языковые функции с широким влиянием, получают бюджет для полной поддержки отладчика. Например, лямбда-выражения.

Это не означает, что регистрация ошибки не является хорошей причиной, просто вы не должны ожидать, что что-то станет лучше, если вы используете аспект, который еще даже не полностью разработан. Быть ранним усыновителем всегда имеет такую ​​цену, но также и право хвастаться: -)

0 голосов
/ 09 июля 2010

имейте в виду, что контракты кода в настоящее время не работают с условиями Post и многопоточностью.ограничить контракты, чтобы сделать только переписывание предварительных условий.это решило много проблем в нашей системе.

...