查詢 Windows 作業系統 .NET Framework Version

2021-02-19

筆記查詢作業系統上 .NET Framework 版本的方法🔍
Determine which .NET Framework versions are installed

logo

說明

.NET Framework 每個版本有其 common language runtime (CLR) 、 base class libraries 以及 managed libraries,因此若沒有安裝正確版本的 .NET Framework,可能會造成程式無法運行。 此外 .NET Framework 4.8 是微軟最新也是最後的版本,日後僅會有安全性的更新,但短期內微軟沒有將其移除的計畫,只是對於新的開發專案,微軟更建議使用 .NET 5 來進行。

常見因為 .NET Framework 所引發的錯誤:

剖析器錯誤訊息: Web.config 檔案的 元素中的 'targetFramework' 屬性只能用於目標為 4.0 (含) 以後版本的 .NET Framework (例如 '')。'targetFramework' 屬性目前參考的版本比所安裝的 .NET Framework 版本還要新。請指定有效的目標 .NET Framework 版本,或是安裝所需的 .NET Framework 版本。

關於版本的相容性

.NET Framework 版本 2.0、3.0 和 3.5 都是基於 CLR (CLR 2.0) 所建置。 因此無法在作業系統並存 2.0、3.0 和3.5。當安裝 3.5 版時,針對 2.0、3.0 和 3.5 版所建置的應用程式都可以在 3.5 版上執行。

在 .NET Framework 4 結束基於 (CLR 2.0) 的建置方法,.NET Framework 4 支援執行不同版本的 CLR (4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, and 4.8) 在單一行程中(in a single process)。

使用 PowerShell

Detect .NET Framework Version

第一方式是從機碼比較 Release Number 來判斷 .NET Framework 的版本

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full'

版本的對照如下:

[
  { 'Version' : '4.5', 'Number' : 378389},
  { 'Version' : '4.5.1', 'Number' : 378675},
  { 'Version' : '4.5.2', 'Number' : 379893},
  { 'Version' : '4.6', 'Number' : 393295},
  { 'Version' : '4.6.1', 'Number' : 394254},
  { 'Version' : '4.6.2', 'Number' : 394802},
  { 'Version' : '4.7', 'Number' : 460798},
  { 'Version' : '4.7.1', 'Number' : 461308},
  { 'Version' : '4.7.2', 'Number' : 461808},
  { 'Version' : '4.8', 'Number' : 528040},
]

第二種方式也是查詢機碼,但依機碼中的 version 進行判斷

Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' `
  -Recurse | Get-ItemProperty -Name version -EA 0 `
  | Where { $_.PSChildName -Match '^(?!S)\p{L}'} `
  | Select PSChildName, version

Find CLR versions

使用 RuntimeEnvironment 可以取得 CLR 的版本,其格式為 v4.0.Build版號

[System.Runtime.InteropServices.RuntimeEnvironment]::GetSystemVersion()

使用 System.Environment 可以取得 Build 以及 Revision:

[System.Environment]::Version

參考資料

Overview of .NET Framework

.NET Framework versions and dependencies

How to: Determine which .NET Framework versions are installed

Mitigation: Product Versioning

Use PowerShell to Work with the .NET Framework Classes