У меня есть проект. В этом проекте я использую кодовые контракты для .NET. Я установил Runtime Checking = true. . Но во время выполнения У меня есть ContractException:Сборка не переписана ccrewriter, хотя Runtime Checking = true
Exception брошенную: 'System.Diagnostics.Contracts.ContractException' в mscorlib.dll
Дополнительная информация: сборка (вероятно, "Общие") должен быть переписан используя двоичный перезаписывающий код кодовых контрактов (CCRewrite), потому что вызывается Contract.Ensures и символ CONTRACTS_FULL - . Удалите все явные определения символа CONTRACTS_FULL из вашего проекта и перестройте. CCRewrite можно загрузить с http://go.microsoft.com/fwlink/?LinkID=169180.
После установки перезаписывающего устройства его можно включить в Visual Studio на странице свойств проекта на панели «Контракты кода». Убедитесь, что активирован «Выполнение проверки выполнения времени выполнения», который будет определять CONTRACTS_FULL Причина исключения не в том, что условие не выполняется, но сборка не переписывается. Ccrewriter установлен, у меня нет проблем с другими проектами.
код, где это происходит:
Contract.Ensures(_instance != null && _instance._authData != null);
Этот код не переписан так он выполняет в начале процедуры.
Я знаю, что есть обходное решение, чтобы просто использовать событие postbuild для выполнения ccrewrite, но я бы хотел его избежать.
В чем причина такого поведения? Как я могу проверить, был ли ccrewrite даже вызван? Я не вижу никакой информации в моем выпуске сборки.