用戶可在他們的計算機上安裝和運行 .NET Framework 的多個版本。 當你開發或部署應用時,你可能需要知道用戶的計算機上安裝了哪些 .NET Framework 版本。
.NET Framework 由兩個采用不同版本的主要組件構成:
-
一組程序集,它們是為應用提供功能的類型與資源的集合。 .NET Framework 和程序集使用相同的版本號。
-
公共語言運行時 (CLR),可管理並執行應用的代碼。 CLR 由其自己的版本號標識(請參閱版本和依賴關系)。
備注
每個新版本的 .NET Framework 都會保留早期版本中的功能並會添加新功能。 可在同一台計算機上同時加載多個版本的 .NET Framework,這意味着可安裝 .NET Framework 而無需卸載以前的版本。 通常,你不應卸載以前版本的 .NET Framework,因為你使用的應用程序可能依賴於特定版本,如果刪除該版本,可能會中斷。
.NET Framework 版本和 CLR 版本之間存在差異:
- .NET Framework 版本基於構成 .Net Framework 類庫的一組程序集。 例如,.NET Framework 版本包括 4.5、4.6.1 和 4.7.2。
- CLR 版本基於 .NET Framework 應用程序執行的運行時。 單個 CLR 版本通常可支持多個 .NET Framework 版本。 例如,CLR 版本 4.0.30319.xxxxx 支持 .NET Framework 版本 4 到 4.5.2(其中 xxxxx 小於 42000),而 CLR 版本 4.0.30319.42000 支持從 .NET Framework 4.6 開始的 .NET Framework 版本。
有關版本的詳細信息,請參見 .NET Framework 版本和依賴關系。
若要獲取計算機上安裝的 .NET Framework 版本列表,請訪問注冊表。 可使用注冊表編輯器查看注冊表或使用代碼進行查詢:
- 查找較新的 .NET Framework 版本(4.5 及更高版本):
- 查找較舊的 .NET Framework 版本 (1–4):
若要獲取計算機上安裝的 CLR 版本列表,請使用工具或代碼:
有關檢測安裝的每個 .NET Framework 版本的更新的信息,請參閱如何:確定已安裝的 .NET Framework 更新。
查找較新的 .NET Framework 版本(4.5 及更高版本)
在注冊表中查找 .NET Framework 4.5 及更高版本
-
在“開始”菜單中,選擇“運行”,輸入 regedit,然后選擇“確定” 。
必須具有管理憑據才能運行 regedit。
-
在注冊表編輯器中,打開以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. 如果“完整”子項不存在,則表示尚未安裝 .NET Framework 4.5 或更高版本 。
備注
注冊表中的“.NET Framework 安裝程序” 文件夾不以句點開頭 。
-
請檢查名為“Release”的 DWORD 條目 。 如果存在,則安裝 .NET Framework 4.5 或更高版本。 其值是對應於特定版本的 .NET Framework 的版本密鑰。 以下圖為例,“Release”條目的值為 378389,這是 .NET Framework 4.5 的版本密鑰 。
下表列出了 .NET Framework 4.5 及更高版本的獨立操作系統的 Release DWORD 的值。
重要
下表僅列出了 .NET Framework 已發布版本的密鑰。 它並沒有列出預覽版或預發布版本的密鑰。
.NET Framework 版本 | Release DWORD 的值 |
---|---|
.NET Framework 4.5 | 所有 Windows 操作系統:378389 |
.NET Framework 4.5.1 | 在 Windows 8.1 和 Windows Server 2012 R2 上:378675 在所有其他 Windows 操作系統上:378758 |
.NET Framework 4.5.2 | 所有 Windows 操作系統:379893 |
.NET Framework 4.6 | 在 Windows 10 上:393295 在所有其他 Windows 操作系統上:393297 |
.NET Framework 4.6.1 | 在 Windows 10 11 月更新系統上:394254 在所有其他 Windows 操作系統(包括 Windows 10)上:394271 |
.NET Framework 4.6.2 | 在 Windows 10 周年更新和 Windows Server 2016 上:394802 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:394806 |
.NET Framework 4.7 | 在 Windows 10 創意者更新上:460798 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:460805 |
.NET Framework 4.7.1 | 在 Windows 10 Fall Creators Update 和 Windows Server 版本 1709 上:461308 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:461310 |
.NET Framework 4.7.2 | 在 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 上:461808 在除 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 之外的所有 Windows 操作系統上:461814 |
.NET Framework 4.8 | 在 Windows 10 2019 年 5 月更新上:528040 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:528049 |
可以使用這些值,如下所示:
-
若要確定具體的 Windows 操作系統版本上是否安裝了特定版本的 .NET Framework,請測試 Release DWORD 值是否等於 表中列出的值。 例如,若要確定 Windows 10 系統上是否安裝了 .NET Framework 4.6,請測試 Release 值是否等於 393295 。
-
若要確定是否安裝了最低版本的 .NET Framework,請對該版本使用較小的 RELEASE DWORD 值。 例如,如果應用程序在 .NET Framework 4.6 或更高版本下運行,請測試 RELEASE DWORD 值是否大於或等於 393295 。 若要查看僅列出每個 .NET Framework 版本的最小 RELEASE DWORD 值的表,請參閱 .NET Framework 4.5 及更高版本的最小 Release DWORD 值。
-
若要測試多個版本,請先測試值是否大於或等於最新 .NET Framework 版本的較小 DWORD 值,然后將該值與每個連續較舊版本的較小 DWORD 值進行比較 。 例如,如果應用程序需要 .NET Framework 4.7 或更高版本,且你希望確定是否安裝了特定版本的 .NET Framework,請先測試 RELEASE DWORD 值是否大於或等於 461808 (.NET Framework 4.7.2 的較小 DWORD 值)。 然后,將 RELEASE DWORD 值與每個更新版本的 .NET Framework 的較小值進行比較。 若要查看僅列出每個 .NET Framework 版本的最小 RELEASE DWORD 值的表,請參閱 .NET Framework 4.5 及更高版本的最小 Release DWORD 值。
使用代碼查找 .NET Framework 4.5 及更高版本
-
使用 RegistryKey.OpenBaseKey 和 RegistryKey.OpenSubKey 方法訪問 Windows 注冊表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子項 。
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子項中存在“Release”DWORD 條目表示已在電腦上安裝 .NET Framework 4.5 或更高版本 。
-
檢查“Release”條目的值以確定安裝的版本 。 為了向前兼容,可檢查是否有一個值大於或等於 .NET Framework 版本表中所列的值。
下例檢查注冊表中“Release”條目的值,以查找已安裝的 .NET Framework 4.5 及更高版本 :
using System;
using Microsoft.Win32;
public class GetDotNetVersion
{
publicstaticvoidMain(){
Get45PlusFromRegistry();
}
privatestaticvoidGet45PlusFromRegistry(){
const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
{
if (ndpKey != null && ndpKey.GetValue("Release") != null) {
Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int) ndpKey.GetValue("Release"))}");
}
else {
Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
}
}
// Checking the version using >= enables forward compatibility.
stringCheckFor45PlusVersion(int releaseKey){
if (releaseKey >= 528040)
return "4.8 or later";
if (releaseKey >= 461808)
return "4.7.2";
if (releaseKey >= 461308)
return "4.7.1";
if (releaseKey >= 460798)
return "4.7";
if (releaseKey >= 394802)
return "4.6.2";
if (releaseKey >= 394254)
return "4.6.1";
if (releaseKey >= 393295)
return "4.6";
if (releaseKey >= 379893)
return "4.5.2";
if (releaseKey >= 378675)
return "4.5.1";
if (releaseKey >= 378389)
return "4.5";
// This code should never execute. A non-null release key should mean
// that 4.5 or later is installed.
return "No 4.5 or later version detected";
}
}
}
// This example displays output like the following:
// .NET Framework Version: 4.6.1
此示例遵循版本檢查的建議做法:
-
檢查“Release”條目的值是否大於或等於已知版本密鑰的值 。
-
按從最新版本到最早版本的順序檢查。
使用 PowerShell 檢查所需的 .NET Framework 的最低版本(4.5 或更高版本)
- 使用 PowerShell 命令檢查“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子項的“Release”條目的值 。
以下示例檢查“Release”條目的值,以確定是否已安裝 .NET Framework 4.6.2 或更高版本 。 如果安裝了此代碼,則返回 True
,否則返回 False
。
# PowerShell 5
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' | Get-ItemPropertyValue -Name Release | Foreach-Object { $_ -ge 394802 }
# PowerShell 4
(Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802
若要檢查不同的所需最低 .NET Framework 版本,請使用 .NET Framework 版本表中的“Release”值替換這些示例中的 394802 。
查找較舊的 .NET Framework 版本 1–4
在注冊表中查找 .NET Framework 版本 1–4
-
在“開始”菜單中,選擇“運行”,輸入 regedit,然后選擇“確定” 。
必須具有管理憑據才能運行 regedit。
-
在注冊表編輯器中,打開以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP:
-
對於 .NET Framework 1.1 到 3.5 版,每個安裝的版本都在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP”子項下列為子項 。 例如,“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5” 。 版本號存儲為版本子項的“Version”條目中的值 。
-
對於 .NET Framework 4,“Version”條目位於“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client”或“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full”子項下,或同時位於這兩個子項下 。
備注
注冊表中的“.NET Framework 安裝程序”文件夾不以句點開頭 。
下圖顯示了 .NET Framework 3.5 的子項及其“Version”條目 。
-
使用代碼查找 .NET Framework 版本 1–4
- 使用 Microsoft.Win32.RegistryKey 類訪問 Windows 注冊表中的“HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP”子項 。
以下示例查找已安裝的 .NET Framework 1-4 1–4:
using Microsoft.Win32;
using System;
public static class VersionTest
{
publicstaticvoidMain(){
GetVersionFromRegistry();
}
privatestaticvoidGetVersionFromRegistry(){
// Opens the registry key for the .NET Framework entry.
using (RegistryKey ndpKey =
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
{
foreach (var versionKeyName in ndpKey.GetSubKeyNames())
{
// Skip .NET Framework 4.5 version information.
if (versionKeyName == "v4")
{
continue;
}
if (versionKeyName.StartsWith("v"))
{
RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
// Get the .NET Framework version value.
var name = (string)versionKey.GetValue("Version", "");
// Get the service pack (SP) number.
var sp = versionKey.GetValue("SP", "").ToString();
// Get the installation flag, or an empty string if there is none.
var install = versionKey.GetValue("Install", "").ToString();
if (string.IsNullOrEmpty(install)) // No install info; it must be in a child subkey.
Console.WriteLine($"{versionKeyName}{name}");
else
{
if (!(string.IsNullOrEmpty(sp)) && install == "1")
{
Console.WriteLine($"{versionKeyName}{name} SP{sp}");
}
}
if (! string.IsNullOrEmpty(name))
{
continue;
}
foreach (var subKeyName in versionKey.GetSubKeyNames())
{
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
name = (string)subKey.GetValue("Version", "");
if (! string.IsNullOrEmpty(name))
sp = subKey.GetValue("SP", "").ToString();
install = subKey.GetValue("Install", "").ToString();
if (string.IsNullOrEmpty(install)) //No install info; it must be later.
Console.WriteLine($"{versionKeyName}{name}");
else
{
if (!(string.IsNullOrEmpty(sp )) && install == "1")
{
Console.WriteLine($"{subKeyName}{name} SP{sp}");
}
else if (install == "1")
{
Console.WriteLine($" {subKeyName}{name}");
}
}
}
}
}
}
}
}
// The example displays output similar to the following:
// v2.0.50727 2.0.50727.4927 SP2
// v3.0 3.0.30729.4926 SP2
// v3.5 3.5.30729.4926 SP1
// v4.0
// Client 4.0.0.0
查找 CLR 版本
使用 Clrver.exe 查找當前的 CLR 版本
使用 CLR 版本工具 (Clrver.exe) 確定計算機上安裝了哪些版本的 CLR:
-
從 Visual Studio 的開發人員命令提示,輸入
clrver
。示例輸出:
consoleVersions installed on the machine: v2.0.50727 v4.0.30319
使用 Environment 類查找當前的 CLR 版本
重要
對於 .NET Framework 4.5 及更高版本,請勿使用 Environment.Version 屬性來檢測 CLR 的版本。 而應按照使用代碼查找 .NET Framework 4.5 及更高版本中所述查詢注冊表。
-
查詢 Environment.Version 屬性以檢索 Version 對象。
返回的
System.Version
對象標識當前正在執行代碼的運行時版本。 它不返回計算機上可能已安裝的程序集版本或運行時的其他版本。對於 .NET Framework 版本 4、4.5、4.5.1 和 4.5.2,返回的 Version 對象的字符串表示形式為 4.0.30319. xxxxx(其中 xxxxx 小於 42000)。 對於 .NET Framework 4.6 及更高版本,它的格式為 4.0.30319.42000。
-
獲得
Version
對象后,按如下方式查詢:-
對於主要版本標識符(例如,4 表示版本 4.0),請使用 Version.Major 屬性 。
-
對於次要版本標識符(例如,0 表示版本 4.0),請使用 Version.Minor 屬性
-
對於整個版本字符串(例如,4.0.30319.18010),請使用 Version.ToString 方法 。此方法返回一個值,該值反映正在執行代碼的運行時的版本。 它不返回可能安裝在計算機上的程序集版本或其他運行時版本。
-
以下示例使用 Environment.Version 屬性檢索 CLR 版本信息:
using System;
public class VersionTest
{
publicstaticvoidMain(){
Console.WriteLine($"Version: {Environment.Version}");
}
}
// The example displays output similar to the following:'
// Version: 4.0.30319.18010
來源:https://docs.microsoft.com/zh-cn/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
用戶可在他們的計算機上安裝和運行 .NET Framework 的多個版本。 當你開發或部署應用時,你可能需要知道用戶的計算機上安裝了哪些 .NET Framework 版本。
.NET Framework 由兩個采用不同版本的主要組件構成:
-
一組程序集,它們是為應用提供功能的類型與資源的集合。 .NET Framework 和程序集使用相同的版本號。
-
公共語言運行時 (CLR),可管理並執行應用的代碼。 CLR 由其自己的版本號標識(請參閱版本和依賴關系)。
備注
每個新版本的 .NET Framework 都會保留早期版本中的功能並會添加新功能。 可在同一台計算機上同時加載多個版本的 .NET Framework,這意味着可安裝 .NET Framework 而無需卸載以前的版本。 通常,你不應卸載以前版本的 .NET Framework,因為你使用的應用程序可能依賴於特定版本,如果刪除該版本,可能會中斷。
.NET Framework 版本和 CLR 版本之間存在差異:
- .NET Framework 版本基於構成 .Net Framework 類庫的一組程序集。 例如,.NET Framework 版本包括 4.5、4.6.1 和 4.7.2。
- CLR 版本基於 .NET Framework 應用程序執行的運行時。 單個 CLR 版本通常可支持多個 .NET Framework 版本。 例如,CLR 版本 4.0.30319.xxxxx 支持 .NET Framework 版本 4 到 4.5.2(其中 xxxxx 小於 42000),而 CLR 版本 4.0.30319.42000 支持從 .NET Framework 4.6 開始的 .NET Framework 版本。
有關版本的詳細信息,請參見 .NET Framework 版本和依賴關系。
若要獲取計算機上安裝的 .NET Framework 版本列表,請訪問注冊表。 可使用注冊表編輯器查看注冊表或使用代碼進行查詢:
- 查找較新的 .NET Framework 版本(4.5 及更高版本):
- 查找較舊的 .NET Framework 版本 (1–4):
若要獲取計算機上安裝的 CLR 版本列表,請使用工具或代碼:
有關檢測安裝的每個 .NET Framework 版本的更新的信息,請參閱如何:確定已安裝的 .NET Framework 更新。
查找較新的 .NET Framework 版本(4.5 及更高版本)
在注冊表中查找 .NET Framework 4.5 及更高版本
-
在“開始”菜單中,選擇“運行”,輸入 regedit,然后選擇“確定” 。
必須具有管理憑據才能運行 regedit。
-
在注冊表編輯器中,打開以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full. 如果“完整”子項不存在,則表示尚未安裝 .NET Framework 4.5 或更高版本 。
備注
注冊表中的“.NET Framework 安裝程序” 文件夾不以句點開頭 。
-
請檢查名為“Release”的 DWORD 條目 。 如果存在,則安裝 .NET Framework 4.5 或更高版本。 其值是對應於特定版本的 .NET Framework 的版本密鑰。 以下圖為例,“Release”條目的值為 378389,這是 .NET Framework 4.5 的版本密鑰 。
下表列出了 .NET Framework 4.5 及更高版本的獨立操作系統的 Release DWORD 的值。
重要
下表僅列出了 .NET Framework 已發布版本的密鑰。 它並沒有列出預覽版或預發布版本的密鑰。
.NET Framework 版本 | Release DWORD 的值 |
---|---|
.NET Framework 4.5 | 所有 Windows 操作系統:378389 |
.NET Framework 4.5.1 | 在 Windows 8.1 和 Windows Server 2012 R2 上:378675 在所有其他 Windows 操作系統上:378758 |
.NET Framework 4.5.2 | 所有 Windows 操作系統:379893 |
.NET Framework 4.6 | 在 Windows 10 上:393295 在所有其他 Windows 操作系統上:393297 |
.NET Framework 4.6.1 | 在 Windows 10 11 月更新系統上:394254 在所有其他 Windows 操作系統(包括 Windows 10)上:394271 |
.NET Framework 4.6.2 | 在 Windows 10 周年更新和 Windows Server 2016 上:394802 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:394806 |
.NET Framework 4.7 | 在 Windows 10 創意者更新上:460798 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:460805 |
.NET Framework 4.7.1 | 在 Windows 10 Fall Creators Update 和 Windows Server 版本 1709 上:461308 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:461310 |
.NET Framework 4.7.2 | 在 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 上:461808 在除 Windows 10 2018 年 4 月更新和 Windows Server 版本 1803 之外的所有 Windows 操作系統上:461814 |
.NET Framework 4.8 | 在 Windows 10 2019 年 5 月更新上:528040 在所有其他 Windows 操作系統(包括其他 Windows 10 操作系統)上:528049 |
可以使用這些值,如下所示:
-
若要確定具體的 Windows 操作系統版本上是否安裝了特定版本的 .NET Framework,請測試 Release DWORD 值是否等於 表中列出的值。 例如,若要確定 Windows 10 系統上是否安裝了 .NET Framework 4.6,請測試 Release 值是否等於 393295 。
-
若要確定是否安裝了最低版本的 .NET Framework,請對該版本使用較小的 RELEASE DWORD 值。 例如,如果應用程序在 .NET Framework 4.6 或更高版本下運行,請測試 RELEASE DWORD 值是否大於或等於 393295 。 若要查看僅列出每個 .NET Framework 版本的最小 RELEASE DWORD 值的表,請參閱 .NET Framework 4.5 及更高版本的最小 Release DWORD 值。
-
若要測試多個版本,請先測試值是否大於或等於最新 .NET Framework 版本的較小 DWORD 值,然后將該值與每個連續較舊版本的較小 DWORD 值進行比較 。 例如,如果應用程序需要 .NET Framework 4.7 或更高版本,且你希望確定是否安裝了特定版本的 .NET Framework,請先測試 RELEASE DWORD 值是否大於或等於 461808 (.NET Framework 4.7.2 的較小 DWORD 值)。 然后,將 RELEASE DWORD 值與每個更新版本的 .NET Framework 的較小值進行比較。 若要查看僅列出每個 .NET Framework 版本的最小 RELEASE DWORD 值的表,請參閱 .NET Framework 4.5 及更高版本的最小 Release DWORD 值。
使用代碼查找 .NET Framework 4.5 及更高版本
-
使用 RegistryKey.OpenBaseKey 和 RegistryKey.OpenSubKey 方法訪問 Windows 注冊表中的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子項 。
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子項中存在“Release”DWORD 條目表示已在電腦上安裝 .NET Framework 4.5 或更高版本 。
-
檢查“Release”條目的值以確定安裝的版本 。 為了向前兼容,可檢查是否有一個值大於或等於 .NET Framework 版本表中所列的值。
下例檢查注冊表中“Release”條目的值,以查找已安裝的 .NET Framework 4.5 及更高版本 :
using System;
using Microsoft.Win32;
public class GetDotNetVersion
{
publicstaticvoidMain(){
Get45PlusFromRegistry();
}
privatestaticvoidGet45PlusFromRegistry(){
const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
{
if (ndpKey != null && ndpKey.GetValue("Release") != null) {
Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int) ndpKey.GetValue("Release"))}");
}
else {
Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
}
}
// Checking the version using >= enables forward compatibility.
stringCheckFor45PlusVersion(int releaseKey){
if (releaseKey >= 528040)
return "4.8 or later";
if (releaseKey >= 461808)
return "4.7.2";
if (releaseKey >= 461308)
return "4.7.1";
if (releaseKey >= 460798)
return "4.7";
if (releaseKey >= 394802)
return "4.6.2";
if (releaseKey >= 394254)
return "4.6.1";
if (releaseKey >= 393295)
return "4.6";
if (releaseKey >= 379893)
return "4.5.2";
if (releaseKey >= 378675)
return "4.5.1";
if (releaseKey >= 378389)
return "4.5";
// This code should never execute. A non-null release key should mean
// that 4.5 or later is installed.
return "No 4.5 or later version detected";
}
}
}
// This example displays output like the following:
// .NET Framework Version: 4.6.1
此示例遵循版本檢查的建議做法:
-
檢查“Release”條目的值是否大於或等於已知版本密鑰的值 。
-
按從最新版本到最早版本的順序檢查。
使用 PowerShell 檢查所需的 .NET Framework 的最低版本(4.5 或更高版本)
- 使用 PowerShell 命令檢查“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full”子項的“Release”條目的值 。
以下示例檢查“Release”條目的值,以確定是否已安裝 .NET Framework 4.6.2 或更高版本 。 如果安裝了此代碼,則返回 True
,否則返回 False
。
# PowerShell 5
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\' | Get-ItemPropertyValue -Name Release | Foreach-Object { $_ -ge 394802 }
# PowerShell 4
(Get-ItemProperty "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full").Release -ge 394802
若要檢查不同的所需最低 .NET Framework 版本,請使用 .NET Framework 版本表中的“Release”值替換這些示例中的 394802 。
查找較舊的 .NET Framework 版本 1–4
在注冊表中查找 .NET Framework 版本 1–4
-
在“開始”菜單中,選擇“運行”,輸入 regedit,然后選擇“確定” 。
必須具有管理憑據才能運行 regedit。
-
在注冊表編輯器中,打開以下子項:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP:
-
對於 .NET Framework 1.1 到 3.5 版,每個安裝的版本都在“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP”子項下列為子項 。 例如,“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5” 。 版本號存儲為版本子項的“Version”條目中的值 。
-
對於 .NET Framework 4,“Version”條目位於“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client”或“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Full”子項下,或同時位於這兩個子項下 。
備注
注冊表中的“.NET Framework 安裝程序”文件夾不以句點開頭 。
下圖顯示了 .NET Framework 3.5 的子項及其“Version”條目 。
-
使用代碼查找 .NET Framework 版本 1–4
- 使用 Microsoft.Win32.RegistryKey 類訪問 Windows 注冊表中的“HKEY_LOCAL_MACHINE\Software\Microsoft\NET Framework Setup\NDP”子項 。
以下示例查找已安裝的 .NET Framework 1-4 1–4:
using Microsoft.Win32;
using System;
public static class VersionTest
{
publicstaticvoidMain(){
GetVersionFromRegistry();
}
privatestaticvoidGetVersionFromRegistry(){
// Opens the registry key for the .NET Framework entry.
using (RegistryKey ndpKey =
RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).
OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
{
foreach (var versionKeyName in ndpKey.GetSubKeyNames())
{
// Skip .NET Framework 4.5 version information.
if (versionKeyName == "v4")
{
continue;
}
if (versionKeyName.StartsWith("v"))
{
RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
// Get the .NET Framework version value.
var name = (string)versionKey.GetValue("Version", "");
// Get the service pack (SP) number.
var sp = versionKey.GetValue("SP", "").ToString();
// Get the installation flag, or an empty string if there is none.
var install = versionKey.GetValue("Install", "").ToString();
if (string.IsNullOrEmpty(install)) // No install info; it must be in a child subkey.
Console.WriteLine($"{versionKeyName}{name}");
else
{
if (!(string.IsNullOrEmpty(sp)) && install == "1")
{
Console.WriteLine($"{versionKeyName}{name} SP{sp}");
}
}
if (! string.IsNullOrEmpty(name))
{
continue;
}
foreach (var subKeyName in versionKey.GetSubKeyNames())
{
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
name = (string)subKey.GetValue("Version", "");
if (! string.IsNullOrEmpty(name))
sp = subKey.GetValue("SP", "").ToString();
install = subKey.GetValue("Install", "").ToString();
if (string.IsNullOrEmpty(install)) //No install info; it must be later.
Console.WriteLine($"{versionKeyName}{name}");
else
{
if (!(string.IsNullOrEmpty(sp )) && install == "1")
{
Console.WriteLine($"{subKeyName}{name} SP{sp}");
}
else if (install == "1")
{
Console.WriteLine($" {subKeyName}{name}");
}
}
}
}
}
}
}
}
// The example displays output similar to the following:
// v2.0.50727 2.0.50727.4927 SP2
// v3.0 3.0.30729.4926 SP2
// v3.5 3.5.30729.4926 SP1
// v4.0
// Client 4.0.0.0
查找 CLR 版本
使用 Clrver.exe 查找當前的 CLR 版本
使用 CLR 版本工具 (Clrver.exe) 確定計算機上安裝了哪些版本的 CLR:
-
從 Visual Studio 的開發人員命令提示,輸入
clrver
。示例輸出:
consoleVersions installed on the machine: v2.0.50727 v4.0.30319
使用 Environment 類查找當前的 CLR 版本
重要
對於 .NET Framework 4.5 及更高版本,請勿使用 Environment.Version 屬性來檢測 CLR 的版本。 而應按照使用代碼查找 .NET Framework 4.5 及更高版本中所述查詢注冊表。
-
查詢 Environment.Version 屬性以檢索 Version 對象。
返回的
System.Version
對象標識當前正在執行代碼的運行時版本。 它不返回計算機上可能已安裝的程序集版本或運行時的其他版本。對於 .NET Framework 版本 4、4.5、4.5.1 和 4.5.2,返回的 Version 對象的字符串表示形式為 4.0.30319. xxxxx(其中 xxxxx 小於 42000)。 對於 .NET Framework 4.6 及更高版本,它的格式為 4.0.30319.42000。
-
獲得
Version
對象后,按如下方式查詢:-
對於主要版本標識符(例如,4 表示版本 4.0),請使用 Version.Major 屬性 。
-
對於次要版本標識符(例如,0 表示版本 4.0),請使用 Version.Minor 屬性
-
對於整個版本字符串(例如,4.0.30319.18010),請使用 Version.ToString 方法 。此方法返回一個值,該值反映正在執行代碼的運行時的版本。 它不返回可能安裝在計算機上的程序集版本或其他運行時版本。
-
以下示例使用 Environment.Version 屬性檢索 CLR 版本信息:
using System;
public class VersionTest
{
publicstaticvoidMain(){
Console.WriteLine($"Version: {Environment.Version}");
}
}
// The example displays output similar to the following:'
// Version: 4.0.30319.18010
請參閱
出處:https://www.cnblogs.com/nsw2018/p/11533981.html
==========================================================================================
PowerShell查看安裝的.Net framework版本信息
查看當前PowerShell的.Net運行版本
PS> $PSVersionTable.CLRVersion Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 34014 PS> [environment]::Version Major Minor Build Revision ----- ----- ----- -------- 4 0 30319 34014
查看所有安裝的.Net 版本
PS> dir 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP' | sort-object name -Descending | select-object -ExpandProperty PSChildName v4.0 v4 v3.5 v3.0 v2.0.50727 CDF
查看機器是否安裝.Net 4.5
(Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client' -Name Version).Version
請尊重原作者和編輯的辛勤勞動,歡迎轉載,並注明出處!
出處:https://www.pstips.net/query-dot-net-version-by-powershell.html