Как мое приложение может определять во время выполнения версию.NET framework, под которым оно запущено?

#.net

#.net

Вопрос:

Обратите внимание, что этот вопрос относится к версии, под которой запущено приложение, а не ко всем установленным версиям, и к платформе (как показано в VS как «целевая платформа»), а не ко времени выполнения.

Спасибо.

Ответ №1:

Вы можете использовать свойство Version класса Environment. Объединение основного и второстепенного номера версии даст вам версию платформы (например, 2.0). MSDN:http://msdn.microsoft.com/en-us/library/system.environment.version.aspx

Комментарии:

1. Спасибо, но это не дает версию framework — это дает версию CLR.

Ответ №2:

Если вы хотите получить текущую версию CLR, используйте метод Новакова (например, 4.0.30319.239).:

 Environment.Version
  

Если вы хотите узнать версию CLR, на основе которой был создан проект (например, 4.0.0.0), используйте следующее:

 GetType().Assembly.GetReferencedAssemblies().Single(a => a.Name == "mscorlib").Version
  

Это может дать вам значение, отличное от текущего CLR, поскольку сборки более старых версий могут выполняться в более новых версиях CLR. Обратите внимание, что «Целевая платформа» 2.0, 3.0 и 3.5 вернет здесь 2.0.0.0, поскольку все они были созданы на основе версии 2.0 среды CLR.

Вы можете выполнить дополнительную проверку, которая может показать, что проект CLR 2.0 был создан с использованием целевой платформы 3.5:

 typeof(ConsoleSandbox.Program).Assembly.GetReferencedAssemblies()
    .SingleOrDefault(a => a.Name == "System.Core") == null
  

Приведенное выше выражение примет значение true, если целевая платформа равна 3.5 (или 4.0, если mscorlib равен 4.0.0.0), и примет значение false, если целевая платформа равна 2.0 или 3.0 или если ничего из System.Core.dll использовался (например, проект 2.0 / 3.0, который был обновлен).

Если вы объясните необходимость, стоящую за вашим вопросом, возможно, удастся дать вам лучший ответ.