Как узнать, установлен ли .NET 4.02?
Я спросил этот вопрос вчера - он был закрыт как "точный дубликат" некоторыми людьми, которые не нашли времени сами, чтобы внимательно прочитать вопросы/комментарии!
Итак, еще одна попытка - может быть, настало время получить какой-то рабочий ответ, прежде чем он будет закрыт по какой-то бессмысленной причине.
Недавно Microsoft выпустила некоторое "обновление" для .NET Framework. К сожалению, я не знаю, как узнать, какая версия установлена. Framework-Version остается на 4.0.30319.239
.
Спасибо за некоторое просвещение; -)
PS: Установка поддерживаемого времени выполнения в app.config для версии 4.0.2 заставляет приложение сказать мне при запуске, что 4.0.2 не установлен (в кратчайшие сроки - значит, должно быть место, где может быть "настоящая" версия найдено).
Ответы
Ответ 1
Посмотрите:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs
Если вы установили 4.0.2, то существуют следующие дополнительные узлы:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.1,Profile=Client
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SKUs\.NETFramework,Version=v4.0.2,Profile=Client
Ответ 2
Это не должно меняться. Вы не нацелены на конкретные номера сборки фреймворка, вы нацеливаете номер выпуска, который в этом случае равен 4.0. Что вы делаете, когда вам нужно знать точный номер сборки?
WTF - зачем использовать buildcounters?!
Почему бы и нет? Он описывает версию точной. Как правило, вы не выпускаете программное обеспечение с раундом "это версия 1.0.0.0", потому что это может привести к хаосу с версиями для обновлений/исправлений и т.д.
Простота таргетинга на .NET 4.0 должна быть достаточной.
Ответ 3
Попробуем попробовать:
Если вы знаете специальную функцию/метод внутри класса, который присутствует только в .NET 4.02, но не в .NET 4.0, я бы использовал отражение, например. получить список всех методов класса или подпись определенного метода.
Если есть только внутренние (методы/свойства) изменения, вы можете использовать ILSpy для поиска таких изменений, а затем использовать снова отражение для проверки изменений.
С другой стороны, я не уверен, могут ли некоторые ограничения безопасности мешать вам делать рефлексию.