Контракты кода для.NET 3.5 портят отладчик VS10

Я недавно переместил большой ручной бросок тестирования и исключения предварительного условия с контрактами кода. Вместо того, чтобы обновить до.NET 4, я использовал Microsoft.Contracts.dll блок, таким образом, я мог придерживаться.NET 3.5 немного дольше (это - библиотека, которой пользуются и.NET 3.5 и.NET 4 блока). Я заключил контракты rewriter в 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

7
задан Trillian 9 July 2010 в 00:55
поделиться

2 ответа

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

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

1
ответ дан 7 December 2019 в 20:33
поделиться

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

0
ответ дан 7 December 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: