System.MissingMethodException - версия для версии 3.5 SP1
После развертывания веб-сервиса ASP.net на моем рабочем сервере я получил это исключение:
System.MissingMethodException
Метод не найден: 'Boolean System.Threading.WaitHandle.WaitOne(Int32)
В документации MSDN указано:
Информация о версии .NET Framework Поддерживается в: 3.5 SP1, 3.0 SP2, 2.0 SP2
поэтому причина этой ошибки в том, что мой сервер не был обновлен до последнего пакета обновления.
Возникает вопрос:
Почему начинается запуск кода? IMO, если версия целевой каркас отличается, приложение не должно начинаться вообще.
Как я могу заверить, что мой код может работать в версии рамок целевого компьютера перед JIT?
Это сумасшествие. Я думаю, что Microsoft должна более серьезно относиться к вопросам управления версиями.
Ответы
Ответ 1
То же самое произошло со мной с 1.1 и 1.1 SP1 давным-давно...
Я думаю, там нет хорошего решения, так как сборки имеют одну и ту же версию, вы можете попробовать проверить ее вручную, читая установленную версию .net или просто установить последние пакеты обновлений на всех своих dev и производственных машинах.
Ответ 2
Хотя метод:
Boolean System.Threading.WaitHandle.WaitOne(Int32)
не существует, метод:
Boolean System.Threading.WaitHandle.WaitOne(Int32, bool)
существует.
Глядя на отражатель - WaitOne(Int32)
вызывает WaitOne(Int32,bool)
с false
как логическое значение. Поэтому просто используйте вторую подпись, предоставляя false
в качестве логического значения, и вы должны быть в порядке.
Ответ 3
Я согласен. Проблема в том, что номера версии сборки не изменились.
При переходе на .NET 3.5 SP1 я убедился, что разработчики не используют API-интерфейсы, специфичные для SP1, поскольку на сервере сборки не установлен SP (то есть версия фреймворка сервера сборки соответствует версии рамочной машины). Затем, как только мы были готовы, SP1 был установлен на сервере сборки. Подобный подход мог бы избавить вас от боли.