Как узнать, установлен ли .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 для поиска таких изменений, а затем использовать снова отражение для проверки изменений.

С другой стороны, я не уверен, могут ли некоторые ограничения безопасности мешать вам делать рефлексию.