用戶可在他們的計算機上安裝和運行 .NET Framework 的多個版本。當(dāng)你開發(fā)或部署應(yīng)用時,你可能需要知道用戶的計算機上安裝了哪些 .NET Framework 版本。請注意,.NET Framework 由兩個采用不同版本的主要組件構(gòu)成:
一組程序集,它們是為應(yīng)用提供功能的類型與資源的集合。.NET Framework 和程序集使用相同的版本號。
公共語言運行時 (CLR),可管理并執(zhí)行應(yīng)用的代碼。.NET Framework 版本和依賴關(guān)系)." xml:space="preserve">CLR 由其自己的版本號標(biāo)識(請參閱 .NET Framework 版本和依賴關(guān)系)。
若要獲取計算機上安裝的 .NET Framework 版本的準(zhǔn)確列表,你可以在代碼中查看注冊表或查詢注冊表:
查看注冊表(版本 1-4) 查看注冊表(版本 4.5 和更高版本)
使用代碼查詢注冊表(版本 1-4)
使用代碼查詢注冊表(版本 4.5 和更高版本)
若要查找 CLR 版本,你可以使用工具或代碼:
使用 Clrver 工具
使用代碼查詢 System.Environment 類
如何:確定安裝了哪些 .NET Framework 更新." xml:space="preserve">有關(guān)檢測安裝的每個 .NET Framework 版本的更新的信息,請參閱如何:確定安裝了哪些 .NET Framework 更新。installation guide." xml:space="preserve">有關(guān)安裝 .NET Framework 的信息,請參閱安裝指南。
通過查看注冊表來查找 .NET Framework 版本 (.NET Framework 1-4)
在“開始”菜單上,選擇“運行”。
在“打開”框中,輸入“regedit.exe”。
你必須具有管理憑據(jù)才能運行 regedit.exe。
在注冊表編輯器中,打開以下子項:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
安裝的版本將在 NDP 子項的下方列出。版本號存儲在“版本”項中。對于 .NET Framework 4,“版本”項位于客戶端或完整子項下(在 NDP 下),或在兩個子項下。
注意 注冊表中的“NET Framework Setup”文件夾不會以句點開頭。
通過查看注冊表來查找 .NET Framework 版本(.NET Framework 4.5 和更高版本)
在“開始”菜單上,選擇“運行”。
在“打開”框中,輸入“regedit.exe”。
你必須具有管理憑據(jù)才能運行 regedit.exe。
在注冊表編輯器中,打開以下子項:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full
請注意,Full 子項的路徑包括 Net Framework 子項,而不包括 .NET Framework。
注意 如果 Full 子項不存在,則表示你尚未安裝 .NET Framework 4.5 或更高版本。
檢查名為 Release 的 DWORD 值。存在 Release DWORD 表明該計算機上已安裝 .NET Framework 4.5 或更新版本。
Release DWORD 的值指示將安裝的 .NET Framework 版本。
Release DWORD 的值
版本
378389
.NET Framework 4.5
378675
使用 Windows 8.1 或 Windows Server 2012 R2 安裝的 .NET Framework 4.5.1
378758
安裝在 Windows 8、Windows 7 SP1 或 Windows Vista SP2 上的 .NET Framework 4.5.1
379893
.NET Framework 4.5.2
在 Windows 10 系統(tǒng)上:393295
在所有其他操作系統(tǒng)版本上:393297
.NET Framework 4.6
通過在代碼中查詢注冊表來查找 .NET Framework 版本 (.NET Framework 1-4)
Microsoft.Win32.RegistryKey class to access the Software\Microsoft\NET Framework Setup\NDP\ subkey under HKEY_LOCAL_MACHINE in the Windows registry." xml:space="preserve">使用 Microsoft.Win32.RegistryKey 類訪問 Windows 注冊表中 HKEY_LOCAL_MACHINE 下的 Software\Microsoft\NET Framework Setup\NDP\ 子項。
下面的代碼顯示此查詢的示例。
注意 此代碼不演示如何檢測 .NET Framework 4.5 或更高版本。檢查 Release DWORD 以檢測這些版本,如上一節(jié)所述。
private static void GetVersionFromRegistry() { // Opens the registry key for the .NET Framework entry. using (RegistryKey ndpKey = RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, ""). OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\")) { // As an alternative, if you know the computers you will query are running .NET Framework 4.5 // or later, you can use: // using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, // RegistryView.Registry32).OpenSubKey(@"SOFTWARE\Microsoft\NET Framework Setup\NDP\")) foreach (string versionKeyName in ndpKey.GetSubKeyNames()) { if (versionKeyName.StartsWith("v")) { RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName); string name = (string)versionKey.GetValue("Version", ""); string sp = versionKey.GetValue("SP", "").ToString(); string install = versionKey.GetValue("Install", "").ToString(); if (install == "") //no install info, must be later. Console.WriteLine(versionKeyName + " " + name); else { if (sp != "" && install == "1") { Console.WriteLine(versionKeyName + " " + name + " SP" + sp); } } if (name != "") { continue; } foreach (string subKeyName in versionKey.GetSubKeyNames()) { RegistryKey subKey = versionKey.OpenSubKey(subKeyName); name = (string)subKey.GetValue("Version", ""); if (name != "") sp = subKey.GetValue("SP", "").ToString(); install = subKey.GetValue("Install", "").ToString(); if (install == "") //no install info, must be later. Console.WriteLine(versionKeyName + " " + name); else { if (sp != "" && install == "1") { Console.WriteLine(" " + subKeyName + " " + name + " SP" + sp); } else if (install == "1") { Console.WriteLine(" " + subKeyName + " " + name); } } } } } } }
該示例生成類似下面內(nèi)容的輸出:
v2.0.50727 2.0.50727.4016 SP2 v3.0 3.0.30729.4037 SP2 v3.5 3.5.30729.01 SP1 v4 Client 4.0.30319 Full 4.0.30319
通過在代碼中查詢注冊表來查找 .NET Framework 版本(.NET Framework 4.5 和更高版本)
Release DWORD 的存在表明該計算機上已安裝 .NET Framework 4.5 或更高版本。關(guān)鍵字的值表示已安裝的版本。OpenBaseKey and OpenSubKey methods of the Microsoft.Win32.RegistryKey class to access the Software\Microsoft\NET Framework Setup\NDP\v4.0\Full subkey under HKEY_LOCAL_MACHINE in the Windows registry." xml:space="preserve">若要檢查此關(guān)鍵字,使用OpenBaseKey 類的 OpenSubKey 和 Microsoft.Win32.RegistryKey 方法訪問 Windows 注冊表中的 HKEY_LOCAL_MACHINE 下的 Software\Microsoft\NET Framework Setup\NDP\v4.0\Full 子項。
檢查 Release 關(guān)鍵字的值以確定安裝的版本。為了向前兼容,你可以檢查是否有一個值大于或等于表中所列的值。此處是 .NET Framework 版本及相關(guān)聯(lián)的 Release 關(guān)鍵字。
版本
Release DWORD 的值
.NET Framework 4.5
378389
使用 Windows 8.1 安裝的 .NET Framework 4.5.1
378675
安裝在 Windows 8、Windows 7 SP1 或 Windows Vista SP2 上的 .NET Framework 4.5.1
378758
.NET Framework 4.5.2
379893
隨 Windows 10 一起安裝的 .NET Framework 4.6
393295
在所有其他 Windows 操作系統(tǒng)版本上安裝的 .NET Framework 4.6
393297
下面是檢查是否有大于或等于每個版本的發(fā)行關(guān)鍵字值的值的示例:
private static void Get45or451FromRegistry() { using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\")) { int releaseKey = Convert.ToInt32(ndpKey.GetValue("Release")); if (true) { Console.WriteLine("Version: " + CheckFor45DotVersion(releaseKey)); } } }
// Checking the version using >= will enable forward compatibility, // however you should always compile your code on newer versions of // the framework to ensure your app works the same. private static string CheckFor45DotVersion(int releaseKey) { if (releaseKey >= 393295) { return "4.6 or later"; } if ((releaseKey >= 379893)) { return "4.5.2 or later"; } if ((releaseKey >= 378675)) { return "4.5.1 or later"; } if ((releaseKey >= 378389)) { return "4.5 or later"; } // This line 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"; }
該示例生成類似下面內(nèi)容的輸出:
Version: 4.5.1 or later
使用 Clrver 工具查找當(dāng)前運行時版本
使用 CLR 版本工具 (Clrver.exe) 決定已安裝在計算機上的公共語言運行時的版本。
從 Visual Studio 命令提示符處,輸入 clrver。該命令生成類似下面的輸出:
Versions installed on the machine: v2.0.50727 v4.0.30319
Clrver.exe(CLR 版本工具)." xml:space="preserve">有關(guān)使用此工具的詳細(xì)信息,請參閱 Clrver.exe(CLR 版本工具)。
通過在代碼中查詢 Environment 類來查找當(dāng)前運行時版本
Environment.Version property to retrieve a Version object that identifies the version of the runtime that is currently executing the code." xml:space="preserve">查詢 Environment.Version 屬性,以檢索標(biāo)識當(dāng)前正在執(zhí)行代碼的運行時版本的 Version 對象。Version.Major property to get the major release identifier (for example, "4" for version 4.0), the Version.Minor property to get the minor release identifier (for example, "0" for version 4.0), or the Object.ToString method to get the entire version string (for example, "4.0.30319.18010", as shown in the following code)." xml:space="preserve">你可以使用 Version.Major 屬性獲取主版本標(biāo)識符(例如,4.0 版的“4”),使用 Version.Minor 屬性獲取次版本標(biāo)識符(例如,4.0 版的“0”),或使用 Object.ToString 方法獲取完整版本字符串(例如“4.0.30319.18010”,如下面的代碼中所示)。此屬性返回一個值,該值反映當(dāng)前正在執(zhí)行代碼的運行時的版本;它不返回程序集版本或可能已在計算機上安裝的運行時的其他版本。
Environment.Version property returns a Version object whose string representation has the form 4.0.30319.xxxxx." xml:space="preserve">對于 .NET Framework 版本 4、4.5、4.5.1 和 4.5.2,Environment.Version 屬性返回字符串表現(xiàn)形式具有窗體 4.0.30319.xxxxx 的 Version 對象。4.0.30319.42000." xml:space="preserve">對于 .NET Framework 4.6,它具有窗體 4.0.30319.42000。
Environment.Version property for runtime version information:" xml:space="preserve">以下是在 Environment.Version 屬性中查詢運行時版本信息的示例:
private static void GetVersionFromEnvironment() { Console.WriteLine("Version: " + Environment.Version.ToString()); }
該示例生成類似下面內(nèi)容的輸出:
Version: 4.0.30319.18010