У меня есть повтор следующего сценария, его можно воспроизводить снова и снова (до и после развертывания appdir содержит одинаковое содержимое):
- Приложение MVC, работающее под Umbraco, .NET 4.6, с расширениями собственного производства
- Для развертывания я удаляю все, кроме
web.config
, и копирую новое содержимое в папку приложений IIS, Windows 2012 R2 Server.
Приложение автоматически перезапускается, кэши очищаются, результат (только на одной конкретной странице, когда инициируется MVC-проверка полей ввода): InvalidOperationException
, подробности:
An unhandled exception occurred
System.InvalidOperationException: Either ErrorMessageString or ErrorMessageResourceName must be set, but not both.
at System.ComponentModel.DataAnnotations.ValidationAttribute.SetupResourceAccessor()
at System.ComponentModel.DataAnnotations.ValidationAttribute.get_ErrorMessageString()
at System.ComponentModel.DataAnnotations.ValidationAttribute.FormatErrorMessage(String name)
at System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(Object value, ValidationContext validationContext)
- Затем я удаляю комментарий в разделе
<compile><assemblies>
(комментарий в первой строке)
- Результат: ошибка ушла
- Добавление комментария назад: ошибка все еще исчезла
- Начиная с первого шага снова: ошибка вернется
Что меня больше всего удивляет, так это то, что удаление комментария оказывает такое влияние, и разница между появлением / исчезновением вышеупомянутой ошибки.
Я не могу обнаружить разницу в структуре каталогов. Любое изменение в разделе <compilation>
, кажется, вызывает это поведение (даже комментарий). Другие изменения в других разделах файла web.config не вызывают это поведение.
Я полагаю, что это ошибка в способе обновления .NET-кэша компилятора (кеш JIT или иным способом), но я не могу это установить. Это известная проблема с веб-приложениями .NET? Я не сталкивался с этим раньше (за два десятилетия разработки .NET), насколько я помню.