Можно ли использовать контракты Microsoft Code с веб-сайтом ASP.NET?

В настоящее время я использую Microsoft Code Contracts в приложении ASP.NET MVC без каких-либо проблем, но я не могу заставить его работать на базовом веб-сайте ASP.NET. Я не совсем уверен, что это было сделано для работы с этим типом проекта (хотя это не должно иметь значения), поэтому я хотел донести его до всех.

Я могу скомпилировать контракты просто отлично, но код пропускает их, так как я предполагаю, что он не был включен на странице свойств, как вы сделали бы в других типах проектов (например, ASP.NET MVC). Я перешел на страницу свойств проекта (которая отображает диалоговое окно вместо страницы типичных свойств) на моем веб-сайте ASP.NET, но он не предоставляет те же параметры меню и поэтому не имеет раздела, посвященного кодировать контракты.

Кроме того, у меня правильно включены контракты кода Microsoft в проекте библиотеки классов, который я использую для отделения своей бизнес-логики от веб-сайта. Контракты компилируются нормально, но когда контракт нарушается, он выдает довольно малоинформативный "Exception of type 'System.ExecutionEngineException' was thrown" ошибка без внутреннего исключения. В моем контракте указывается сообщение, отображаемое при нарушении, но оно нигде не исключено. Это просто останавливает выполнение процесса (который, я считаю, является функциональностью по умолчанию для Microsoft Code Contracts).

Я не могу найти нигде, где бы прямо указывалось, что конкретный тип проекта может или не может (или не должен) использоваться с Контрактами, поэтому я просто хотел посмотреть, есть ли у кого-нибудь эта проблема.

Спасибо за любую помощь!

2 ответа

У меня была такая же проблема, и вот как я ее решил:

В ссылочных библиотеках классов щелкните правой кнопкой мыши -> свойства -> контракты кода. Убедитесь, что "выполнить проверку контракта" отмечен. У меня установлена ​​полная сборка ссылки на контракт: убедитесь, что она установлена ​​на сборку

Сохраните ваши изменения.

В ссылочных библиотеках классов, которые не имеют контрактов в своем коде, установите Ссылочную сборку контракта на "Не строить".

Затем в проекте MVC проверяйте контракты кода "выполнить проверку контракта". У меня был мой установлен на "Полный".

Надеюсь, это кому-нибудь поможет.

Это меньше похоже на контракты и больше похоже на проблему сборки / конфигурации. Вы пытались развернуть готовый сайт? Вы уверены, что код вашего сайта видит код контракта? Использует ли среда выполнения ASP.NET CLR 4.0 или видит более раннюю версию Microsoft.Contracts.dll? И т.п.

Другие вопросы по тегам