簡體   English   中英

如何確定是否安裝了 .Net 5 運行時?

[英]How can I determine if the .Net 5 runtime is installed?

我安裝了 .NET 5.0 預覽版 SDK 和運行時。

如何檢測/確定是否從 C# 中安裝了 .Net 5 運行時?

這里有一些問題:

  1. .NET 5不是.NET 框架的一個版本,它是.NET Core的下一個版本(來源
  2. 如果您的應用程序是針對 .NET 5 編譯的,並且您嘗試運行的計算機沒有安裝 .NET 5,那么您的應用程序將無法啟動(將其想象為嘗試在 Z303CB0EF9EDB9082D61BBBE58 上運行為 Z303CB0EF9EDB9082D61BBBE58 編譯的應用程序。僅安裝了 .NET Framework 3.5 的計算機)*

由於 .NET 5 是 .NET Core 的下一個版本,您可以輕松使用新的(在 Core 3.0 中)API

var netVersion = System.Environment.Version;
var runtimeVer = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription;

正如您在原始問題中提到的,您正在閱讀獲取 .NET 框架版本的注冊表項(我假設是這樣)。 那么,指定安裝的 .NET 核心版本的鍵的位置位於不同的位置,即HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions 以下是您如何閱讀它們:

const string subkey = @"SOFTWARE\dotnet\Setup\InstalledVersions";
var baseKey = Registry.LocalMachine.OpenSubKey(subkey);
if (baseKey.SubKeyCount == 0)
    return;

foreach (var platformKey in baseKey.GetSubKeyNames())
{
    using (var platform = baseKey.OpenSubKey(platformKey))
    {
        Console.WriteLine($"Platform: {platform.Name.Substring(platform.Name.LastIndexOf("\\") + 1)}");
        if (platform.SubKeyCount == 0)
            continue;

        var sharedHost = platform.OpenSubKey("sharedhost");
        foreach (var version in sharedHost.GetValueNames())
            Console.WriteLine("{0,-8}: {1}", version, sharedHost.GetValue(version));
    }
}

* 如果你編譯你的應用程序,它會將運行時與你self-contained應用程序捆綁在一起

不要使用公認的答案。 .NET 5 Core 不再將任何內容保存到注冊表中。 我安裝了 .NET 5 並且在SOFTWARE\dotnet的注冊表中沒有任何內容。

此外, RutimeEnvironment和類似的基於環境的檢查將顯示捆綁了框架的“自包含”應用程序的無效結果。

檢查版本的記錄方法是啟動dotnet --infodotnet --list-runtimes並檢查結果。 有一百萬種方法可以啟動控制台命令並檢查 output。

我正在為 dotnet 產品制作安裝程序,我的先決條件之一是安裝 dotnet 5.nn 運行時。 我正在幾個虛擬機中測試所有場景,這就是我發現的不一致之處。

在 VM 上,我第一次開始測試時,根本沒有 MS-NET 產品,因此通過注冊表項 (HKLM/software/dotnet/...) 很容易確定此運行時缺失。 但是,當我安裝運行時然后卸載它時,注冊表項沒有被刪除(順便在另一個VM上刪除了),所以通過注冊表項檢查dotnet運行時返回true,但實際上沒有安裝運行時在機器中,我確實在一分鍾前將其卸載。 這是我的第一張支票。

那么,我接下來做了什么(第二次檢查)? 我確實檢查了文件系統中的 dotnet 物理存在。 這將是 C:\Program Files\dotnet\shared 或 C:\Program Files (x86)\dotnet\shared 位置,基於 32/64 位安裝。 請注意,這些文件夾可能包含一個或多個子文件夾,我感興趣的是這個:Microsoft.NETCore.App -> 持有核心 + 而不是 5.nn 運行時...

第三次檢查是運行時的注冊表安裝/卸載鍵:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{guid}

截至 2021 年 9 月 24 日:我需要找出安裝的 Net 5 版本。 我將我的 MS VS 更新到了最新版本,然后創建了簡單的 console.Net 5 應用程序並從 RuntimeInformation.FrameworkDescription 中獲得了價值。 它是“.NET 5.0.10”

更多信息: https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

您還可以通過運行 VS 安裝程序然后轉到修改部分來檢查。

在此處輸入圖像描述

打開視覺工作室代碼。

從菜單啟動終端

在終端 window 中鍵入以下命令並讀取版本。

dotnet--版本

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM