Как я могу определить, установлена ​​ли среда выполнения .Net 5?

Я установил пакет SDK для предварительного просмотра.NET 5.0 и среду выполнения.

Как мне обнаружить / определить, установлена ​​ли среда выполнения.Net 5 на C#?

6 ответов

Решение

Здесь есть несколько ошибок:

  1. .NET 5 не является версией.NET Framework, это следующая версия .NET Core (источник)
  2. Если ваше приложение скомпилировано для.NET 5, а на компьютере, на котором вы пытаетесь запустить, не установлен.NET 5, ваше приложение просто не запускается (подумайте об этом, как о попытке запустить приложение, скомпилированное для.NET. Framework 4.8 на компьютере, на котором установлена ​​только.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 Framework (я предполагаю, что а-ля так). Расположение ключей, указывающих на установленные версии.NET Core, находится в другом месте, а именно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 и аналогичные проверки на основе envir покажут недопустимые результаты для "автономных" приложений, в которые встроена интегрированная среда.

Документированный способ проверить версию - запустить dotnet --info или dotnet --list-runtimesи проверьте результаты. Есть миллион способов запустить консольную команду и проверить результат.

Я делаю установщик для продукта dotnet, и одним из моих предварительных условий является установка среды выполнения dotnet 5.nn. Я тестирую все сценарии на нескольких виртуальных машинах, и вот какое несоответствие я обнаружил.

На виртуальной машине, когда я впервые начал свой тест, продукта MS-NET не было, поэтому было легко определить это отсутствие среды выполнения по ключу реестра (HKLM/software/dotnet/...). Однако, когда я устанавливаю среду выполнения, а затем удаляю ее, раздел реестра не был удален (кстати, он был удален на другой виртуальной машине), поэтому проверка времени выполнения dotnet через раздел реестра вернула истину, но на самом деле среда выполнения не была установлена в машине я удалил его минуту назад. Это был мой первый чек.

Итак, что я сделал дальше (2-я проверка)? Я проверил физическое существование dotnet в файловой системе. Это будет C:\Program Files\dotnet\shared или C:\Program Files (x86)\dotnet\shared location в зависимости от установки 32/64 бит. Обратите внимание, что эти папки могут содержать одну или несколько подпапок, и одна из них, которая меня интересовала, это одна:Microsoft.NETCore.App -> содержит ядра + не 5.nn Runtime...

И третья проверка - это установленный / удаленный ключ реестра для среды выполнения: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{guid}

По состоянию на 24 сентября 2021 года: мне нужно было узнать, какая версия Net 5 установлена. Я обновил свой MS VS до последней версии, затем создал простое консольное приложение .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 Installer, а затем перейдя в раздел Modify.

Открытый код визуальной студии.

Запустите терминал из меню

Введите следующую команду в окне терминала и прочитайте версию.

точка сети --версия

Другие вопросы по тегам